Resolve two race conditions relating to HA lock sessions

- Adds a check ensuring a slave commit has a running lock session when committing,
  or has explicitly opted out from having one.

- Moves lock session management into its own class, where timeouts and concurrent
  access can be tested in isolation.
Merge pull request #3191 from jakewins/2.2-slavesessions

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