hammer2 - refactor some chain bits, stabilization
* Refactor the hammer2_chain_t MODIFIED and UPDATE flags to not
reference the chain.
* Automatically flag DESTROY on a chain on last-drop if chain->parent is
NULL, and automatically clear UPDATE and try to clear MODIFY. Add the
chain to the delayed-flush queue if MODIFIED cannot be cleared.
* Fix a flags bug in hammer2_chain_hardlink_find() which could deadlock
competing threads.
* The collect code now aggregates errors and the cluster check code now
also aggregates errors. This allows feeders to feed an error code to
the collector.
* Fix rmdir and rename to disallow removal of non-empty directories.
* hammer2_inode_xop_flush() now proceeds with a flush if hmp->flushq
is not empty, even if the chain is not marked for flushing. This
still needs some work.
* Add a sideq for dirty inodes that might have to be flushed. Used for
unlinked dirty inodes which might still be open.
* Call hammer2_inode_modify() whenever possible instead of setting the
HAMMER2_INODE_MODIFIED flag manually.
* Test for chain leaks against blogbench, fsx, and fsstress.