Abstracted Brain to IBrain

Initializer now probes for implementations of IBrain, and Robot
registers found implementations with ContainerBuilder. On
Robot.Configure(...), _brain is resolved by finding an implementer with
IBrain.Name == MMBOT_BRAIN_NAME, and falls back to single resolved
IBrain.
Added AzureTableBrain

Added Azure Table Storage Brain implementation (and remove rogue
AzureStorageBlobCache, which was an aborted attempt to implement an
Akavache Azure demon hybrid).

Sample mmbot.ini, assuming you have MMBot.AzuteTableBrain.dll and
relevant Azure storage assemblies:

[BRAIN]
NAME = AzureTableBrain

[AZURETABLEBRAIN]
STORAGE_ACCOUNT_NAME = mystorageaccountname
ACCESS_KEY = mysecretazurekeywhichisreallylongandsupersecret===
Merge remote-tracking branch 'upstream/master'
Fixed RouterTests.cs from merge
Refactored IBrain to find single implementation

We're now doing the same thing as Router and finding a single
implementation of IBrain by name.

Because we're injecting IBrain later in the Robot initialization
process, Brain isn't available right after Robot.Create() anymore.
Robot.ConfigureBrain() must be called before accessing Brain.

ConsoleAdapter has been refactored to take this into consideration (it
was calling Robot.GetUser(), which hits Brain, in its ctor).
Merge pull request #89 from Spksh/master

Azure Table Storage for Brain persistence