However, it errors out on the new TaxonomySession line with the error in the title. I added a script tag in the default.aspx before the app.js tag to SP.Taxonomy.js. It hasn't helped as I get the same error.

I get the same error as in the title of the post. It errors before ever getting to the executeQueryAsync. I even added context.load(...) for each of the following objects: site, taxSession, termStores, termSet.

I'm assuming it has to do with getting the SP.Taxonomy.js properly loaded. What is the right way if that's the case? I've tried using a ScriptLink (name="/_layouts/SP.Taxonomy.js" runat="server"), script (src="/_layouts/SP.Taxonomy.js"), and
adding the script dynamically via jQuery using both the server-relative URL from script/ScriptLink as well as SPHostUrl (Query String) + "/_layouts/SP.Taxonomy.js." None of these has worked.

Microsoft is conducting an online survey to understand your opinion of the Technet Web site. If you choose to participate, the online survey will be presented to you when you leave the Technet Web site.