More accurate Gremlin API

First all thanks for your excellent work bringing cayley to python.

The main goal of this PR is provide a more accurate API preventing something like
```python
g.M().All()
g.V().Follow(g.V)
```

For this reason I refactored a bit the _GremlinQuery and I split it in `_Path`,  `_Vertex` and `_Morphish`

To I implemented `Union`, `Intersect` and `FollowR`