Split language stuff into separate modules

If we continue to add new languages, the small size of the lib will begin to get compromised. Instead, each language data structure should be split out to its own module, with build steps for compiling single-language or multi-language libs of the user's choice. We can still host these generated output in the repo so that they're easily downloadable, but it will just give people a choice about the scale and size of the library they import.