sketch out a fluent query API

IFilterable<T> and companion interfaces provide a fluent API for
expressing table storage queries on partition and row keys.

AbstractQuery implements IFilterable and constructs a QueryDescriptor
that describes a query to be performed.
translate QueryDescriptor to query

AbstractAzureQuery extends AbstractQuery with the ability to generate a
table storage query from a QueryDescriptor.

In the next commit, we'll specialize AbstractAzureQuery for static and
dynamic queries, and refactor AzureTableEntityTableContext.
refactor Azure queries using fluent query API

We refactor AzureQuery, AzureDynamicQuery, and
AzureTableEntityTableContext to use the fluent query API.
refactor MemoryTableContext with fluent query API
expose fluent query API publically
simplify ITableContext, deprecate old TSP methods

We can reduce the surface area of ITableContext by removing all read
operations except CreateQuery, since it can be used to implement the
behavior of any of the others.

We then re-implement the legacy TableStorageProvider methods in terms of
CreateQuery, and deprecate them.

MemoryTableContext tests have been updated to account for the change,
and still serve their original purposes.