- Jungle Maze + Tight Rope: change JSONs to new model
- ASB templates: for collection views, determine the itemView according to the model type - single use or equippable
- Storefront: build category collections on construction of store model, based on the raw category data.
Add some API methods for new model
Change `currencyBalanceChanged` to new API: `currenciesUpdated`
Add prospective JS API methods for new model
Add some API methods for new model
Add an item view for lifetime virtual goods + support in ASB, ASBP, PirateRace, and Leap of Fangs
Implement error functions in JS API using the store's modal dialog.  Each template defines default message dialog options for rendering
Add new API's playSound method + cleanup
JS API: Open \ close dialog on restore transaction
Fix playSound to accept an argument and default it to pop.mp3.  The path is relative to "sounds/"
- Templates: use `wantsToBuyItem` instead of old API methods
- Storefront: save a map of market items (currency packs)
Change all `virtualCurrencies` references to `currencies`
errUnexpected should not receive arguments
Change model assets hash to hold a {"name" : "img.png"} for each value.  The storefront code then dynamically injects a "url" field for each item ID.  Adjust selected themes and their templates.
Store model construction from JSON and `toJSON`ing aligned
Populate currency packs collection dynamically in `initialize` function and not before
Expose Category model
Remove default item ID from currency.  This was preventing the dashboard from adding new currencies without providing an item ID
Add a function for updating all maps with a new ID
- Replace references to `priceModel` with `purchasableItem` and make changes to prices affect the preview frame
- When updating goods via JS API, don't account for a price attribute being passed in the arguments