Add caret operator

The caret operator has rough semantics "compatible with X". Specifically, it allows any version that is *at least* the specified version, but *less than* the next *major* version.

In other words, `^1.2.3` is equivalent to `>=1.2.3-0 <2.0.0`.