CONTRIBUTING.md: links to CLAHub agreement.

In order to provide more clarity regarding what happens to the contributions,
'CONTRIBUTING.md' now links to an agreement placed on 'CLAHub'.
Removes implicit caching from resolvers.

In an effort to ease testability of the resolvers, implicit caching is removed
from their implementations.  To ensure performance, however, any resolution is
supplied with a 'dict' guaranteed to contain any dependency already resolved.
This guarantee can be provided by resolving units starting from the lowest
levels in the dependency hierarchy (i.e. reversing the topological sort).
Fixes identification of third-party packages.

Third-party packages are determined by a '+' character in their name.
Previously, if the entire path to the package contained a '+' character it was
considered a third-party packages.  This commit strengthens that requirement to
the specification.
resolvers: 'dependencies()' method returns a set.

The ordering of items returned by the 'dependencies()' method is irrelevant, as
the topological ordering will be determined from the overall dependency
structure.  To formalize this, and to ease testing the return value using set
equality, the methods now return 'set's.
Introduces 'PackageResolver' tests.
Introduces 'UnitResolver' tests.
Introduces 'Patcher' and 'OsPatcher'.

These classes can monkey-patch access to the filesystem in order to make other
components testable.