Symlink indexer

Indexes a DirectoryContainer by creating symlinks to the Blob content files. These symlinks can then be accessed by 3rd party apps that just expect a filesystem API.

This indexer is intended to be replaced by some better filsystem abstraction layer.

---------------------
Some of these changes might be a bad idea. The main ones were:
 - change BlobIndex to ContainerIndex because I kept having to think twice about what was being indexed. Having the ContainerIndex allow you to access things in the Container makes more sense to me rather than a BlobIndex that suggests the content of the Blob is being indexed.
 - Splitting the ContainerIndex into a reader and a writer. This was done because the symlink indexer can't really return an 'offset' like the others, the but the writing part of the interface still made sense. Also, being able to broadcast write messages to many indexers was useful but made no sense for readers.
 - rejigging the factory methods for a local blob store. I was trying to avoid sprinkling for factory creation throughout the code.


Also, I didn't know what to call ContainerIndexWriterProxy - suggestions welcome.

Finally, the issue suggested changing the method signatures to support passing in a container instance. I instead kept the containers out of the interface and left it up to the implementations to make sure the right container was being used.