HAMMER 17/many: Refactor IO backend, clean up buffer cache deadlocks.
Rewrite HAMMER's IO backend, sans locking which will occur in another patch.
The new backend is far less confusing though I wouldn't exactly call it
simple.
The new backend keeps track of dependancies with a structure->structure
dependancy list, plus implements the special case of opening and closing
a cluster header. Buffers are synchronized first, then cluster headers,
then volume headers. The new backend also removes a number of potential
deadlocks.