Extract doozer abstractions

This splits out the common abstractions used for doozerd access.
Especially the handling of values over time (snapshots). This
bring the codebase into a state where it is exclusively concerned
with the bazooka domain objects and reflects that in its API. All
visor types should implement cp.Snapshotable.

* Types implement cp.Snapshotable
* Extract Snapshot, Dir, File, Lock, Unlock, conn, codec
* Remove explicit Rev handling
* Expose visor types exclusively
* Improve error handling