[2.2] Resolve two race conditions relating to HA lock sessions

- Add a check ensuring a slave commit has a running lock session when committing,
  or has explicitly opted out from having one.
- Move lock session management into its own class, where timeouts and concurrent
  access can be tested in isolation.
Realized this is an issue, because we may fail, and then the instance() we pulled out will not be reaped, which could be very bad.