Replace MetadataSchema (previously MetadataValidator) with Schema class from the schema module.
resources: code refactors and documentation improvements in preparation of better schema support and support for "external" packages. still not in working order.
Merge branch 'origin/2.0'

Conflicts:
	setup.py
	src/rez/resources.py
resources: more roughing in of new class-based resource paradigm, and supoprt for "external" packages.
resources: more improvements to the use of abstract resources.  resources are now implemented as subclasses of the Resource class.  Class attributes define global properites of the resource, while instantiating the Resource with a path allows the resource to be loaded and validated.
Merge branch 'nerdvegas/2.0'

Conflicts:
	setup.py
	src/rez/packages.py
	src/rez/resources.py
further improve relationship between packages and resources
- Make release.yaml into a resource; remove hard-wired loading code from rez.packages in favor of load_resource()
- add BasePackage.data: read-only attribute-based lookups for metadata
- Improve documentation
resources: convert old-style commands to rex on schema validation
resources: improve documentation
resources: Add the ability to created nested namespace dictionaries in a package.py
resources: create a master schema for the Package class. All resources delivering metadata to the Package class must validate against this master schema.  Use the master schema to create accessor properties for all its top-level keys.
resources: improve the entry points for finding resources and loading metadata.
resources:
- don't hit the disk when determining relative paths for path_pattern comparison
- add {ext} token to path_patterns
resources:  Resources are now allowed to have only one path pattern instead of a list, whcih is now possible with the new {ext} token.  By making a 1-to1 relationship between a resource and its path it is now much easier to add functionality to write a resource to disk based on some passed in metadata.  With a list of paths we would have had to provide some way to choose which one to use when writing.  If the same resource is used in multiple locations this can be handled with new tokens or with subclassing.
resources: improve documentation.  rename "External" to "Combined"
minor bugfix
Merge branch 'nerdvegas/2.0'

Conflicts:
	src/rez/packages.py
	src/rez/util.py
Fix a few bugs.
Take a new approach to creating hierarchies of resources.

The end result is that the Package class takes a single argument: a resource instance.  This handle is used to get the package metadata, and can be serialized and deserialized via plain old data (though that work is not done yet).

Instead of each resource specifying its location on disk relative to the search path, it specifies only its parent resource class.  This new approach makes it possible for resource classes to act as generators for their instances.  This in turn allows us to move the responsibility of the PackageFamily classes to the resource level.
Merge branch 'origin/2.0'