Abstract version comparison and fix version specification in pip.installed states

This is a substantial pull request, and should be thoroughly reviewed before merging. This pull request does the following.

1. Abstracts version comparison to salt.utils (paving the way for it to be used in the pip.installed state).
2. Removes a lot of code from the pkg providers that is now unnecessary since the relevant code lives in salt.utils.
3. Updates the pkg states (and, where applicable, the pkg providers) so that the new version comparison code is used.
4. Makes a couple modifications to the pip.installed state to both properly handle version specification, and force version specification to override upgrade=True. (see 56e98c4 and #5270).

The changes to the pkg states have been tested and confirmed working, but I encourage others to test as well.