Vtgate

This is a redesigned v3. Still WIP.
The main change is that the sharding scheme is pluggable. I introduce the concept of a vindex. You are allowed to define and register any number of vindexes by name. You can then refer to them in your schema by that name.
Vindexes are required to satisfy a certain set of interfaces. They allow VTGate to build plans, route queries, and create/delete entries for vindexes that support those operations.
You can use a vindex to define keyspace id based routing, hash routing, or lookup-based routing. Vindexes can also be non-unique if such property is needed.
Query routing work is in progress.
More vindexes need to be implemented.
More queries need to be handled.