Force valid uid and type of UIDMeta object on instantiation

This forces valid `uid` and `type` values on `UIDMeta` instantiation by checking the values in the constructors. This allows us to skip checking those values in a few different cases as removed in the code.

Unfortunately there's still a constructor that doesn't check this (the default empty constructor) but that one is currently needed by the jackson deserialization and while changing that is desirable it is fairly extensive but also  probably outside the scope of the changes in this PR.