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).