ScriptLanguage: use plugin name if present

The language name can be inferred from the name attribute of the @Plugin
annotation. This is nice because it lets us name the languages in a more
succinct way, without needing to override a method.
ScriptLanguageIndex: use an ordered collection

The HashSet is not ordered, so iterating over it returns the
ScriptLanguages in a random order. But we want them in priority order,
which is the order they are added to the collection.

This change arguably breaks backwards compatibility, but in 99% of the
cases the API calls in practice will be the same (e.g., contains), so
I'm going to fudge this one.