a very temporary test.py to sanity check these big changes
always pass around tree hashes

We want to create commits, to avoid garbage collection and to give some
visibility into the state of the cache. But we don't want commit hashes
to make their way into cache keys, because those hashes won't be
consistent from one repo to another (timestamps etc). Keep the commits
hidden in the internals of Cache, and only return tree hashes to
callers.
make Rule and Remote fields more explicit

Preparing for a proper parser class, to handle all the YAML details.
first version of Parser, splitting out RemoteModule