SemVer 2.0 and npm semver support

This brings composer in line with npm's semver package + follows some more semver rules.

- Adds `^` operator for stricter semver ranges
- Adds `1.0 - 2.0` ranges
- Adds support for `+build.metadata` suffixes
- Spaces are now equivalent to commas for AND
- `||` is now equivalent to `|` for OR