Added @Pipeline.cast@ to allow pipeline end type to be reset.

Currently if a Java client uses a function that loses the end type of then they have to recast the pipeline if they want to use the for-each syntax, e.g:

```java
GremlinPipeline<Vertex, Edge> p = new GremlinPipeline<Vertex, Edge>();
for (Edge e : (GremlinPipeline<Vertex, Edge>)p.outE("permission-of").as("permission").inV().back("permission")) {
//Stuff
}
```
Adding a cast function allows the end type to be manually set without the noise of casting.
```java
GremlinPipeline<Vertex, Edge> p = new GremlinPipeline<Vertex, Edge>();
for (Edge e : p.outE("permission-of").as("permission").inV().back("permission").cast(Edge.class)) {
//Stuff
}
```