rex commands: bugfixes, cleanup, documentation, and restore previous check for variables set by multiple packages.
rex commands: allow thru(major), thru(minor), thru(patch)
In most cases where the family package directory is returned from RezMemCache it would be easier if the path to the package.yaml file was returned instead.
Use a context manager to provide a global function to get the memcache. this eliminates the need to pass a memcache instance throughout the resolution process.  the context manager keeps the memcache alive only during the time that it is needed, which is basically just resolve_base().

the only downside is that if you call PackageRequest(latest=True) you get an error because it needs to do an immediate resolution, but previously you needed a memcache instance for this so it is unlikely that this class is being instanciated outside of the context of Resolver.resolve().
Add new packages module which contains public classes and functions for working with rez packages.  Convert RezMemCache to return these classes where appropriate.
Use new Package class iterators, and do some code cleanup.  config_list, depends, info, and help are rather confusingly written (config_list and info both seem to do something similar yet in different and equally incomplete fashion) so I'm not sure I have reproduced the behavior exactly, but you get the idea.
Implement a single, global memcache, removing the need for a context manager.

this ensures that caching will automatically work without the need to manually create a RezMemCache.

to accomplish this, the epoch filtering has been moved onto the various methods that require it.  this ensures that a single RezMemCache instance can be shared by multiple resolves using different timestamps within the same python session.  timestamp filtering is still done after retrieving the data from the cache, so the data placed there will remain the same.
Merge branch 'python-commands'

Conflicts:
	python/rez/rez_config.py
merge fixes. may need to cherry-pick back to other branch.
fixes to previous commit
Added new class packages.PackageFamily which replaces package iteration on RezMemCache.
Redesigned the way that configuation files are versioned and validated to consolidate access to all metadata and make it easier to provide variations and backward compatibility.
Merge branch 'python-commands'

Conflicts:
	python/rez/packages.py
	python/rez/rez_config.py
	python/rez/rez_metafile.py
rex.EnvironRecorderDict:  if environ is not explicitly passed, make a copy of os.environ so we don't change the current environment. if modifying the current environment is desired, the commands can be played back with the Python CommandInterpreter