This commit is a subset of the asset-engine branch, only adding the uuid struct to data-blocks, with a basic minimal RNA/Python API to use it.
It does not contain anything regarding asset engines and asset management itself.
Besides being a first step towards full integration of asset engine work into master, it is also the 'minimal requirement' from the studio here for next Cosmos production pipeline (regarding own in-house management tools).
AssetUUIDs are opaque data for Blender, it is the responsibility of the asset engine (or the user code of the lower-level basic UUID API) to generate them, ensure they are valid and unique, free them when not necessary anymore, etc.). Blender does take care of saving and re-reading those UUIDs to/from .blend files, so they are by default persistent data.
AssetUUIDs are supposed to be unique to one ID, so they are not duplicated when copying an ID (as a reminder, by default ID copying code does not copy the content of the ID struct itself, except for a few explicit hand-picked members).