Split RecordSet into RecordSet\Buffered (default) and
RecordSet\Unbuffered; Replace Driver::getRecords() with Hydrator that
builds records one at a time; Add Record::getRawPropertyValue($name) to
allow bypassing retrieval of related records; Revert
Record::__construct's $data param; Revert setting related record's
related properties to point to base record to avoid creating circular
references that inhibit garbage collection; Generate multi-line and
indented SQL