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.
It appears that since only the docstring on the first declaration comes into effect, it looks at
```
* @param {number|String} w When provided, ...
```
And looks at the definition
```typescript
    public width(): number;
```
And says "since this definition doesn't have a `w` parameter, I'm going to ignore the @param". So we should put the setter first, so that we get that documentation.

tl;dr: I'm going to swap the order of all of the getter/setters.