Subsort fixes

The subsort information in Context and the isSubsort method on Productions were designed for parsing purposes. In particular, they consider list elements to be subsorts of the list, and treat a production consisting of a single nonterminal as a subsorting even if it has a label. This makes a lot of sense if you think about concrete syntax, and what you are allowed to write at places where a particular sort is expected, but it's not the right subsort relationship to use in most of the compiler.

Overall, these commits rename the existing subsort related things to have "Syntactic" in the name, change the previous nicer names to give the correct semantic subsorting relationship, and change non-parser things to use the semantic relationships. This caused a few bugs where the last element in user lists were not wrapped into lists, which were mostly concealed (at least in the Java engine) by the sort checks accepting bare items in place of lists.

@radumereuta please review.
Is there a constant somewhere so you don't have to use strings?