Make QueryContext solely use Iterators

Investigating a traversal matching bug hinted at Java->Scala conversion draining Iterable instances together with the first iterator returned by them.
This change was made to avoid such problems in the future and be more explicit about when data is retrieved from the database.

o Introduce DynamicIterable as a way to construct an Iterable that re-reads from the graph
o Replace FilteringIterable with SingleStep.FilteringIterator
Reduce pruning to fix missing relationships bug