DBObjectMap: restructure map_header_in_use locking

Tieing map_header_in_use to a _Header is a mistake since ownership of
the map_header_in_use can move (clone).  Instead, grab the
map_header_in_use entry at the top of each call chain and release at the
end.  To facilitate that, we introduce a MapHeaderLock object and
require that it be passed to the various map header manipulation
methods.

Fixes: #9326
Signed-off-by: Samuel Just <sam.just@inktank.com>
Merge remote-tracking branches 'wonzhq/req-pending', 'origin/wip-9326', 'somnathr/wip-optracker-optimization', 'origin/wip-8315', 'upstream/wip-7767-b', 'origin/wip-9453', 'origin/wip-9481', 'origin/wip-9482' and 'origin/wip-9497' into wip-sam-testing