This class is a wrapper around the MySQL result returned and can be used to iterate over it.
It also provides a simple caching mechanism which stores the result after the first load. You are then free to iterate over the result back and forth through the provided methods and don't have to think about hitting the database too often. On initialization, it needs a `PDOStatement` to operate on. You are then free to use all methods provided by the `Iterator` interface.