Implement vertex queries and vertex-centric indexes

- Blueprints docs on [vertex queries](https://github.com/tinkerpop/blueprints/wiki/Vertex-Query)
- Titan docs on [vertex-centric indexes](http://s3.thinkaurelius.com/docs/titan/current/indexes.html#vertex-indexes)

An important point from the blueprints docs:
> Note that for label and direction filtering, the methods Vertex.getEdges() and Vertex.getVertices() can be used as these are typical behaviors.

So a more universal approach would be using vertex-query for `v.outE`/`.inE`  _always_ explicitly. For that these steps will take predicates over an edge (an empty predicate is the current case):

```scala
val path = user.outE(follows ? (since > Date(..))
```

Note that in contrast to the global `Query` step, it takes an actual predicate, not a predicate-type. 

Btw, `Filter` step should be very similar. Actually an evaluator should optimize `user.outE(follows).filter(since > Date(..))` to this `user.outE(follows ? (since > Date(..))`...