Add lazy collection

As discussed with @stof [here](https://github.com/doctrine/doctrine2/pull/882) this is an abstract lazy collection that could be reused across various components.

If this is merged I can then be used for the ORM PR :).