Initial commit of Titan Files.
Move some testing files and update titan_client docstrings.
Refactor hooks to clarify argument passing.
Add support for syncing multiple directories with titanfs.
Fix services integration and import issues.

This now requires that a user's appengine_config.py call hooks.LoadServices() to
enable services (instead of calling it at the module level in files.py, which
caused circular imports when a service would also try to load the files module).
Added the Memory Files service, hook result short-circuiting, and hook configs.

Both Pre() and Post() hook methods can now short-circuit the response by returning a hooks.TitanMethodResult object.
Remove core Read() method and change Get() return behavior.

The core files.Get() method now returns None if a file doesn't exist.
Also, when called with multiple paths, Get() returns a dictionary mapping
paths to files.File objects. Only files that exist are present in the return.
This is a backwards-incompatible change, but makes the Get() interface much
clearer going forward.

Read() still exists in the HTTP API and the TitanClient, but no longer
in the core API or any service hooks.
Numerous improvements and features:

- Added core files.Copy() method.
- Added blob handling in TitanClient, can now stream large files directly to blobstore and automatically associate the blobkeys to a Titan File.
- Allow native namespacing to work by removing hard-coded namespaces and using key prefixes instead.
- Added namespaces service plugin. When enabled, all Titan operations can be segmented into their own namespace by specifying the "namespace" argument to core Titan methods.
- Added customizable error handling for hooks.
- Optimized sharded_cache to be more efficient for single-shard items.
- Renamed "services_override" to "disabled_services". Any Titan Files call can specify disabled_services=['service name'] to avoid hooks for that call.
- Make titan_client more threadsafe.
- Added service plugins for versions, microversions, and file expirations.
- Added created_by and modified_by user data to lowest-level _File entity, as well as support in versions and microversions.
- Added name property to _File entities, for indexing and support of queries based on filename.
- Improved hook error logging.
- Refactored TitanClientStub and some other testing code.
Performance and API improvements by decoupling from entity objects.

This is a backwards-incompatible change to the API which removes all of the
"file_ent" args to core functions, and adds support for passing File objects
directly to the "path(s)" arg. Plugins and consumers can avoid extra RPCs by
passing fully-populated File objects, which removes the need to split this
information to paths= and file_ents= and also removes all high-coupling to
File._file_ent (at least outside of the files modules).

In the end, this will make this kind of operation perform about half the
number of RPCs, as well as significantly clean up the API and callers:

file_objs = files.Get(files.ListFiles('/some/dir', recursive=True)).values()
files.Delete(file_objs)
Associate paths to changeset objects for strong consistency on commit.

* Added a force=True arg to Commit() to make explicit the risk of missing a
  recently changed file.
* Eliminated empty changeset error in microversions tasks.
Added files.SmartFileList, a generator which loads File objects in batches.
- Rewrote memory_files to do per-request Titan file caching.
- Added common/datastructures.py, which contains a most-recently-used dictionary
  structure and a MRU set structure. These are used by memory_files to limit
  memory usage in a dynamic way, giving preference to often-used files.
  The old design for memory_files was too bug-prone and inconsistent in practice.
- Changed the design of blob upload handling to compensate for different auth schemes.
Miscellaneous cleanup and bug fixes.

- Added Content-Disposition header so downloads directly from _titan/read get the correct filename.
- Use xg_transaction_options in test.
- Fix memory_files order issue.
- Prevent blobs from being deleted when versioned or microversioned.
- Added ability for services to register handler request param validators.
- Added validator for versions service args.
- Added passthrough of args from TitanClient.
- Added lightweight service for maintaining a manifest of file variants.
- Added --force_blobs flag to titan_client.py to force all uploads to blobstore.
Some backwards-incompatible API changes for clarity and consistency.

- Changed APIs to use "blob" for args and entity storage instead of "blobs". Old entity data will be automatically migrated the next time it is written, but API callers which use the "blobs" argument will need to be updated.
- Changed files.Write() and files.Touch() to return File objects.
- Added File.size property.
- Added copy method to handlers and TitanClient.
- Fixed disabled_services handling by requiring an iterable.
- Added support for filters to ListFiles.
Fixed error when reading deprecated blobs property.
- Added files.CopyDir functionality.
- Added Titan Stats, a generic library for creating and recording custom counters, and generating graphs of the counters over time.
- Added stats_recorder service, which records statistics about core Titan Files operations into Titan Stats.
- Added full_text_search service, which automates the process of indexing Titan files in the Full Text Search API (currently in trusted tester).
- Added better support for Python 2.7 runtime.
- Added ability to pass keyword arguments to hook constructors.
- Modified memory files to use request-local environment storage.
- Modified tests to mirror production patching of os.environ.