blkfront: if the 'connect' string is ambiguous, fail

It's better for the developer to specify exactly what they want
rather than us having to guess, and guessing badly.

Relevant to: mirage/mirage-block-xen#31

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
Block.connect: check whether the translated id is already connected

The already-connected devices table uses the canonical names
i.e. the slot numbers. If we call [Block.connect "xvda"] then
we translate "xvda" to "51712" and look this up in the table.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
Block.connect: allow 'connect' to be called in parallel

Instead of storing a Blkfront.t in the devices table, we store
a Blkfront.t Lwt.t. When an entry is missing, we create an
Lwt.task and insert that thread before calling plug(). Any
parallel caller will bind to this thread, instead of calling
plug() in parallel (which doesn't work)

If the case of a device name translation (e.g. xvda -> 51712),
we cache the device under both names.

Fixes: mirage/mirage-block-xen#31

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
Attempt to fix travis

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
travis: only use opam 1.1.0

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
Merge pull request #32 from djs55/fixes

blkfront: if the 'connect' string is ambiguous, fail