Add vocabulary system.

At the top level, a program may introduce a "vocabulary" using the
"vocab" keyword. A vocabulary may be delimited by a block:

    vocab MyVocabulary {
      ...
    }

Or a semicolon:

    vocab MyVocabulary;
    ...

In which case the declaration persists until the next vocabulary
declaration. A vocabulary serves as a namespace for definitions,
allowing multiple definitions of the same name to reside in different
vocabularies. A vocabulary name may be nested:

    vocab org_kittenlang_utilities;

    define utility (...) { ... }

In such a case, it may be desirable to abbreviate the vocabulary prefix
when invoking the definition. A vocabulary abbreviation can be
introduced with the "abbrev" keyword:

    org_kittenlang_utilities_utility

    abbrev U org_kittenlang_utilities
    U_utility

At the moment, an abbreviation must stand for the whole vocabulary name,
not just a portion of it. Furthermore, there is no way to bring all
definitions from a vocabulary into the current scope; this ensures that
the origin of a definition is always apparent when reading code.

Smaller changes included in this diff:

 * Semicolon is now a normal operator

 * Type constructors are namespaced by the type to which they belong

 * Stream definitions now reside in the "stream" vocabulary

 * Syntax highlighting files include the new keywords