issue #23894: add ability to install third-party extensions using npm

This code will add an "Install Extension" privilege. Users with this privilege will be able to go into the setup->configure->database information screen, and type in the name of an xtuple extension to install. The extension has to be a published npm module. Currently, the only one is xtuple-ice-cream.

Installing the extension in this way will register it with the database so that it it will be reinstalled during `build_app`. `peerDependencies` are used in the extension to make sure that the right version will be used. The core will load the most recent version of the plugin that's compatible with the core version. If there's no version of the extension that's compatible with the core version, the update will fail, and the extension (if it's already been installed) will have to be removed.

This system is developed first and foremost for field dev, and third-party extensions. However, it's likely that this methodology will replace the `xtuple-extensions` and possibly the `private-extensions` repos altogether. It also liberates the extension release cycle to be no longer in lockstep with the core release cycle, without the need to consult a human-readable dependency matrix.
@shackbarth
 Re: https://github.com/xtuple/xtuple/pull/1579#issuecomment-46264086

I like this under `enyo-client/database/source/priv.sql`. Files in `tables` seems like it should just be adding columns, indexes, conditions, triggers, etc. All related to structure of the `priv` table. I never viewed `priv.sql` as having anything to do with the `priv` table. It could easily be called `grant_privileges.sql`. In that context, `enyo-client/database/source` seems like the right location. 

I don't feel like this file should be moved to `private-extensions/source/xdruple/database/source/public/tables/priv.sql`:
https://github.com/xtuple/private-extensions/blob/master/source/xdruple/database/source/priv.sql

I don't really care that much either way. This is just how I'm looking at it. Thanks for letting me know you moved it.