Support multiple backends and add alloc backend

Yes but it gets passed into go-etcd and that expects chan bool