Add the ability to register allowed types

Note that the type doesn’t enforce any of this yet
Disallow variants with no allowed types
Verify source type is allowed for a variant