Protofamily

Ok, so I've tried to reconcile this in my head and the best I can come up with is:

    val channel = try {
      bind.family.fold(DatagramChannel.open)(fam ⇒ DatagramChannel.open(fam))
    } catch {
      case e: UnsupportedOperationException =>
        bindCommander ! CommandFailed(bind)
        log.debug("Failed to open UDP channel with protocol family [{}]: {}", bind.family, e)
        context.stop(self)
        DatagramChannel.open
      }
    }

That should keep the type system happy and also let the side effect happen, while also keeping the `channel` a simple type that's easy to work with later.