Add ~x.y.z and ^x.y.z parsing

`0.1.0` is considered incompatible with `0.2.0` but `1.1.0` is considered compatible with `1.2.0`