Document All The Things (At Once)

This should be enough to get us by for now.

I'm going to make it a hard requirement from now on that pull requests contributing significant new functionality come with documentation.
`Top` and `Bottom` are two *very* different types.  In poetic terms, they are the trivial and the impossible, respectively.

Unfortunately, `Void` in Swift is not the same as `Void` in Haskell, but rather the same as `void` in the extended C language family.  In fact, it's defined in the standard library as a `typealias` for `Unit`.

We could go with the name `Nothing`, or we could switch to `Bottom` (in which case we should also have `typealias Top = Unit`), but we shouldn't get rid of this entirely, and we *definitely* shouldn't use the rewrite that you have done here.  An `enum` with no cases is the *only* way to represent the `Bottom` type in Swift right now;  `Void` is not the same thing in this language.  :(