hammer2 - flush sequencing part 5 - more flush synchronization work
* Get rid of chain->parent, replacing it with chain->above which is a
pointer to the core common to the possibly multiple parents. Due
to the multi-parenting, chain->parent was rather ad-hoc so getting
rid of makes the code more clear.
* Adjust several APIs which used to take a locked parent of chain to
instead take the core common to multiple parents of chain.
* Rework how CHAIN_MOVED is cleared. The code works better but still
has bugs which can leave chains hanging and unflushed on umount.
* Rework the lastdrop function significantly.
* Continue working on automatic delete/duplicate operation when a
modification crosses a synchronization boundary. This code is now
mostly implemented.
* Continue working on the flush filter which is responsible for
differentiating modifications made before and after the synchronization
point. The filter is now mostly implemented.
* Use spinlock protection on the rbtree, allowing manipulation of children
without having to lock a specific parent chain (which wouldn't help much
anyway since there can be more than one parent).
* Fix numerous assertions and panics.