Add VersionSpec to better handle version comparison

When install binary of packages, we need to check if the OS version
satisfies the prescribed version condition. So I created VersionSpec to
handle this comparison. There are three comparison operators:
1. '==': The two versions must be exactly the same;
2. '>=': The right version must be newer than the left one;
3. '=~': The version identifiers specified in right version must be the
   same as the ones specified in the left version. The rest identifiers
   can be different.
Fix switch_packages