[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.
No, it's not supposed to happen. Still, it needs to fail in some way if it does happen.