Cross-model generation support for shapes

Before, the ShapeDefinition and the ShapeReference had to be in the same model. Now, the ShapeDefinition can be in a different model, which makes it possible to reuse shapes.