Add some type declarations and do some cleanup.

Untested, but the previous version was invalid, so I'm not too worried

With types you kind of have to strike a balance between user readability
and readability by program analyzers, and with the latter there's
another question, of how much information to include. In the limit,
especially, a function type totally specifies the function's behavior.

I've tried to do ok mixing up all of these. This involves a lot of
deftypes, but I don't think that should be too concerning. Many but not
all of these types mostly correspond to definitions from the CLHS
glossary and I have marked them as such.

Cleanup stuff: Fixed invalid use of &key in function types, a few very
slightly wrong definitions, etc.

Content stuff: Added the rest of "F" alphabetically.

Last philosophical note - would be nice to have these types both spread
out with the function definitions, and in a centrally accessible area.
Possibly something like pjb's computer-readable Lisp specification.