lib/nfs/Connection: add assertions
event/Loop: read the "again" flag while holding mutex
lib/nfs/Connection: fix crash while canceling a failing Open()

The method NfsConnection::CancellableCallback::Callback() will always
invoke NfsConnection::Close() on the file handle, even if the void
pointer is not a nfsfh.  This can happen if the Open() was not
successful, e.g. when the file does not exist.
lib/nfs/Connection: make in_service and in_event debug-only flags
lib/nfs/Connection: move code to method InternalClose()
lib/nfs/Connection: add assertions
lib/nfs/Connection: move code to Service()
lib/nfs/Connection: fix memory leak (and assertion failure)

nfs_destroy_context() will invoke all pending callbacks with
err==-EINTR.  In CancellableCallback::Callback(), this will invoke
NfsConnection::DeferClose(), which however is only designed to be
called from nfs_service().  In non-debug mode, this will leak memory
because nfs_close_async() is never called.

Workaround: before nfs_destroy_context(), invoke nfs_close_async() on
all pending file handles.
lib/nfs/Connection: fix typo in code comment
lib/nfs/Connection: fix reconnect after mount failure

When mounting had not yet finished, SocketMonitor::IsDefined() was
always false, due to the workaround at the beginning of the function
that calls SocketMonitor::Steal().  This commit drops the IsDefined()
check because it was never necessary and breaks reconnect.
lib/nfs/Connection: add assertion
lib/nfs/Connection: add debug flag "in_destroy"
lib/nfs/Connection: implement mount timeout
lib/nfs/Connection: unregister socket with SocketMonitor::Steal()

SocketMonitor::Cancel() does not actually unregister the socket; it
only disables the event.
storage/nfs: clear last_error in SetState()

Fixes bogus assertion failure.
storage/nfs: add timeout
Merge branch 'v0.19.x'