Initial extraction of doozerd abstractions

Origially implemented in soundcloud/visor, this aims to make `Snapshot`,
`File` & `Dir` reusable. The extraction keeps interfaces mostly unchanged.

Exceptions:
* `conn` and it's methods are private
* Mutation methods (`Set`, `Del`, etc.) are public for exposed types
* `Snapshot` implements `Wait` & `Stat`, former methods of `conn`