These are implementation details only, and should not be
part of the stable API.
We need the flexibility to change these at any stage without
being bound by any API contract.
Rationale:
- there was a lot of large objects passed by value, so potentially
there's a speed bump from this
- even for implicitly shared classes like QString/QList there's still
a (small) cost for copying the objects when there's no reason to
- it's the right thing to do!