- data access is now governed by the QReadWriteLock's _docLock and _pageLock
- Pages can exist in a detached state where _parent == NULL (so a Document can
discard them even when they are not destroyed, e.g., because another thread
still holds a QSharedPointer to them)
- some details and policies (for backend implementations) are collected in
…ces to Document and Page objects
Only the respective owner should hold a permanent QSharedPointer to ensure the owned object is destroyed when the owner is destroyed. Any other object should only hold a QWeakPointer (to be able to check validity) and "upgrade" that to a QSharedPointer temporarily (using toStrongRef()) while accessing data.
Page objects are typically owned by the corresponding Document.
Document objects are typically owned by a PDFDocumentScene object.