Change Package DSL

Add 'devel', 'binary' PackageSpec. The 'patch' and 'attach' is also
changed to PackageSpec.
Fix small bug
Add more binary versions for Ncl

Similar distros can share same binary.

Also fix some small mistakes.
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