Empty and non-empty node string types cannot currently safely be used together in a model. Add support for this by extending the definition of CanonicalName. This also needs to be handled when adding/subtracting hypergraphs and patterns. That empty node string types can match any node string type then needs to be taken into account.