Major update to logic for custom widgets. Custom widgets are now each
stored in separate folders, and the various files for the custom widget
can be located anywhere under the top-level (module-level) folder. Also,
various fixes along the way. Fixes #3818. Fixes #3812. Fixes #3811. Also
add some Node.js utility scripts for automatically creating widget
metadata files from JavaScript files.
Merge master into checkout 3810-ProjectTemplates