Doc everything

This branch reviews all of the documentation on our major classes, and ensures that all major public classes and methods are well-documented.

Close #765.
I remember in an email that we can't set multiple jsdoc for multiple signatures or something.  Is this a result of that?  If so, how can we doc it so we can inform of the different signatures?  Not sure if the suggested doc informs of this concisely/accurately