Rewrite the locking in HighLevelFCPClient

The previous locking scheme wasn't thread safe since it used this as the
only lock, while also wait()ing on it. The new version uses this for
making sure that only one request is in progress at any given time, and
donemsgLock for wait/notify/synchronization of the result of that one
request.