Rework DbalReader to reduce memory usage.

Also add several tests about iterator interface

For one of my projects, I needed to pull more than 30k records from db. With previous implementation, it was not working.

refs #66
Okay thats a argument, but In my opinion, use a method to set two parameters isn't a good developer experience.
I would suggest to create a method `setSQL` and `setSQLParameters`.

@ddeboer WDYT?