lots of internal API manipulation -- Pipe now requires getNextPipe() and getPreviousPipe(). This makes it easy to do 'futures' and to optimize pipes by gutting them from pipeline. Added the notion of an EmptyPipe (like an EmptyIterator). Added more helpers to GremlinHelper. Fully tested IdentityOptimizer.