Improve the reliability of the lock service

This commit changes the LockService to use a Guava Cache with soft values.
The previous approach saw lots of race conditions causing IllegalMonitorStateExceptions
when lock contention was high. Now, instead of manually removing locks, we rely
on the JVM to determine if the lock if softly reachable, and if so, remove it from
the cache.
CON-58: Avoid deadlock if an error occurs during transport

This commit ensures that the background transport lock is wrapped
in a try/finally block to make sure that the transportLock is given
up in the event that an error occurs during transport.