Add support for semver symbols (^, ~, etc..)

This is a full rewrite of the `parse()` function, so a heavy
code-review is advised. ;)

This patch removes the usage of regular expressions for parsing slugs.
This *greatly* simplifies the codebase, thus making it much more
maintainable.  In removing the regular expressions, we also gain
support for semver symbols (for example `~^`).

Closes #2.

/cc @yields @MatthewMueller @dominicbarnes @ianstormtaylor