hammer2 - Integrate CCMS thread lock into hammer2 chain structure
* Integrate the CCMS thread lock into the hammer2 chain structure.
* Implement shared and exclusive modes (hammer2 was only really using
exclusive mode before). Rework all the chain and inode locking functions
to use CCMS via chain->cst.
This also required changing the SPLAY trees into RB trees.
* Start reworking non-modifying VNOPS to use shared CCMS locks.
* Rework the hammer2_chain_drop() function to avoid deadlocks due to the
mixed shared/exclusive locks we now support.
* Major performance improvements for concurrent access. SHARED locks now
extend to hammer2_chain and hammer2_inode structural accesses, recursions,
and cached data (buffer cache) accesses.
In particular, multiple threads can now access the same bp via a
hammer2_chain locked shared. The bp's themselves are still exclusive
only (the kernel APIs haven't changed), but the hammer2_chain structure
can now share the bp's data across several threads accessing it via the
chain.