hammer2 - Refactor flush
* Replace HAMMER2_CHAIN_SUBMODIFIED with core->update_tid. SUBMODIFIED
applies to chain->core, not to chain. Use a TID to track updates to
make it easier for a flush to update records without messing up flush
sequencing of chains being concurrently modified outside the flush's
TID (that will be handled in the next flush).
* Make sure the DUPLICATED flag is set when duplicating a chain which
has already been duplicated to another target. This case is only during
flushes and can occur when the flush races against concurrent updates
which are not part of the flush.
* Refactor bioq flushing during a flush. hammer2_vfs_sync now gives the
bioq a window to operate using the flush's TID before the flush actually
starts to flush.
* hammer2_chain_modify() retains the current allocation block if the TID
does not cross a flush boundary.
* chain->bref.mirror_tid is now used to track flush progress and is compared
against core->update_tid to determine when a flush is needed.
* Code cleanups.