Adds support for Semantic Versioning ranges modelled from npm

This commit adds support for version ranges as described here:
https://npmjs.org/doc/json.html#dependencies with the exception
of disparate ranges, URL dependencies, and Git URL dependencies.

Closes #472