hammer2 - serialized flush work part 2
* Adjust the hammer2_inode_lock*() API to separate the inode lock from
the chain lock (it gets both). The locked chain associated with the
inode is now returned and can change during search iterations, eventually
to be returned via hammer2_inode_unlock*().
* Fixes issues related to threads obtaining more than 1 shared lock on the
same chain, which can deadlock deeper procedures which might need to
temporarily upgrade the lock.
* Continue working through bugs.