#260: break datastore cycles via factories

My take on breaking the import cycles in 'gcloud.datastore' by adding a "factory registry" for the classes normally imported.

Note that some classes have more than one factory (class methods like'from_protobuf' and 'from_path'):  each is registered under a separate name.

Also drops 'Dataset.query' and 'Dataset.entity' convenience APIs, pointing instead to constructing Query and Entity directly.

Addresses #260 (for 'gcloud.datastore').
Not possible.  The point is to break the pattern that modules import each other to instantiate classes, which is what led to the messiness.  Consider:

    $ git grep --heading -A1 _FACTORIES.invoke
    gcloud/datastore/_helpers.py
            result = _FACTORIES.invoke('Key_from_protobuf', value_pb.key_value)

    --
            result = _FACTORIES.invoke(
                'Entity_from_protobuf', value_pb.entity_value)
    --
    gcloud/datastore/dataset.py
            return _helpers._FACTORIES.invoke('Transaction', *args, **kwargs)

    --
                entities.append(_helpers._FACTORIES.invoke(
                    'Entity_from_protobuf', entity_pb, dataset=self))
    --
    gcloud/datastore/entity.py
                self._key = _helpers._FACTORIES.invoke(
                    'Key', dataset=dataset).kind(kind)
    --
            key = _helpers._FACTORIES.invoke(
                'Key_from_protobuf', pb.key, dataset=dataset)
    --
                updated_key = _helpers._FACTORIES.invoke(
                    'Key_from_protobuf', key_pb, dataset)
    --
    gcloud/datastore/key.py
                dataset = _helpers._FACTORIES.invoke('Dataset',
                                                    id=pb.partition_id.dataset_id)
    --
    gcloud/datastore/query.py
                ancestor = _helpers._FACTORIES.invoke('Key_from_path', *ancestor)

    --
            return [_helpers._FACTORIES.invoke('Entity_from_protobuf', entity,
                                            dataset=self.dataset())
    --
    gcloud/datastore/transaction.py
                    key = _helpers._FACTORIES.invoke('Key_from_protobuf', key_pb)
                    entity.key(entity.key().path(key.path()))

Note that Keys instantiate Datasets, which instantiate Entiteies, which instantiate Keys.