Put \ifx guards on most other package includes, too. We shouldn't be trying to load "amsopn" ten times, for example. But testing whether or not a package is loaded is tricky. First, I tried the \@ifpackageloaded macro: that causes problems with some of my existing documents, and the "spacefactor" error that results is apparently a FAQ. But I don't know what to do about it. The other way to test if a package is loaded is by checking for some (unique?) macro that it defines. That's what I've guessed at here. It works in most cases, like when we want \operatorname from "amsopn." But, some packages also didn't have something obvious to check for, so coverage isn't 100%.
Wrap all mjotex files in conditionals to prevent double-loading. I plan to start putting glossary entries in mjo-common, and that reveals a problem: some files (i.e. mjo-common.tex) get loaded more than once. And there's not always a way to ignore the duplicate definitions. So, finally, after avoiding it for as long as possible, I've wrapped everything in "ifx" tests that check the value of a macro I define (just like #ifdef HAVE_FOO in C). The \ifx test was chosen over of \ifdefined (which is an e-TeX primitive) because it makes the conditional simpler; we don't need to have an empty "if" block. Of course, testing against \undefined only works if \undefined is... undefined. But theoretically someone could probably redefine \ifdefined, too. Whatever. I can change it if it ever causes a problem.
mjo-theorem{,-star}.tex: add the "exercise" environment.
Remove theorem* from mjo-theorem and be explicit about the default style.
Rename mjo-fonts, mjo-pcases, and mjo-theorems for consistency.