Allows specifying version ranges in NPM states

Allows specifying version ranges in NPM states, so that e.g. npm.install "coffee-script@<1.6.0" will install the latest matching version and the npm.installed state will only install if the current version does not match.