Fix a serious race condition when multiple threads access the same devic...

...e

The low-level I/O mechanism is:
  seek >>= fun _ ->
  (read | write) >>= fun _ ->

Since threads may switch between the seek and the (read | write), we
must hold an Lwt_mutex.t across this section.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>