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.
I'm comfortable with the convention that files in the `tables` folder can also be used to insert data into tables.

https://github.com/xtuple/xtuple/blob/master/enyo-client/database/source/public/tables/metric.sql  
https://github.com/xtuple/xtuple/tree/master/foundation-database/public/tables/metasql  

But I agree that, on second thought, the code that I copied in from your priv file doesn't really belong in the `tables` folder, because it's not just *I am inserting a row into public.priv*. I'll pull this back out and rename it in such a way as does not disrupt my precious tabbing.