Add extraInfo to Node (closes #17)

Not typesafe, because that turned out to be not only of questionable
use, but also impossible. Consider QualifyingType.equals:

    shared actual Boolean equals(Object that) {
        if (is QualifiedType that) {
            return nameAndArgs == that.nameAndArgs && qualifyingType == that.qualifyingType;
        } else {
            return false;
        }
    }

If QualifiedType now gains a type parameter, then the test

    is QualifiedType that // or: is QualifiedType<ExtraInfo> that

also tests for the type parameter, even though we want to ignore the
extra info in equals and hash. For co- or contravariant type parameters,
this is usually solved by using the most general type argument, Anything
or Nothing; however, as ExtraInfo would need to be invariant, this
doesn’t work in our case. In the words of @gavinking, we’re screwed :)

So now we have the type-unsafe alternative, and users have to assert the
expected type themselves.