I don't like all these special cases for NonExistingVersion.INSTANCE all over the place either...

How about adding a method `nonExistingVersion()` to the `VersionGenerator` interface instead, so we'd have a non-existing `NumericVersion` and a non-existing `SimpleClusteredVersion`?