Add a etcd backend for caching facts

This backend is modeled on the redis one, but using the builtin
expiration system of etcd. After looking at various options for
the etcd module, I settled on etcd because it was the easiest to
install with pip, but it should be trivial to change the client.
return dict((key, self.get(key)) for key in self.keys())