ClosableIterator#hasNext() call close() when returning false.

It confuses me a great deal that we aren't doing this already.
Granted we still have to have try/finally to explicitly invoke
close() either in the case of exceptions or if we do not want
to consume from the entire iterator. But as good hygeine it seems
like we should invoke close() when we no longer need the resources.
The unit tests are passing with this change. I can't think of any
obvious reason we aren't doing this already.