Add methods to QgsDataDefined for reading and writing to XML
[layout] Add layout measurement and size classes

These classes are used for storing measurements for a layout
(QgsLayoutMeasurement) and sizes for a layout (QgsLayoutSize).
They support storing a measurement unit alongside a measurement
length/size. A new class QgsLayoutMeasurementConverter handles
conversion between different units, including converting to and
from pixels via a specified DPI property.
[layout] Create a page size registry for layout

Adds a new QgsPageSize class and QgsPageSizeRegistry singleton,
which stores and manages known page sizes
[layout] Add base classes for layout
[layout] Add measurement unit handling to QgsLayout
Start porting page items
Work on moving/resizing with units
[layout] Split unit classes into their own files
[layout] Ensure that moving/resizing items respects reference point
[layout] Create QgsLayoutContext class

Move layout rendering flags to QgsLayoutContext
[layout] Add methods for assigning feature and layer to context
[layout] Add layout object data defined methods
[layout] Port data defined item position and size
[layout] Start porting item rotation
Start porting saving data defined properties