Rename function

- more sensible
Clarify comment
Test extractOptSpec success
WIP: Util.extractMetadata

- TODO:  validate the extracted metadata
Test for missing metadata
Author and description fields are required
Clarify download+update URL fields are optional
Update TODO
Use for..of instead of anon function

- move supported list of fields into exported array
Data-driven supported fields test
Test Util.validateMetadata
Include dependent script modules

- lightly hacked up to work outside of node and without dumping a bunch
  of stuff into global scope
Validate version against semver spec
Parse and validate keywords
Syntax cleanup
Test that keywords is non-empty
Factor out tests for validateMetadata