Display library documentation

Some comments about this change:

* I've moved some methods and properties around, basically putting the setter next to the corresponding getter accessors. The reason is that the [Guidelines for Dart Doc Comments](https://www.dartlang.org/articles/doc-comment-guidelines/#variables-getters-and-setters) state that if there is both a getter and setter, we should comment only the getter. So I think it is a good idea, while the setter does not have documentation that it is at least close to the getter having the documentation.
* I've tried to avoid lines longer than 80 characters.
* I've included quite a few TODOs to indicate comments that I'm not so sure about or where I didn't have any idea what comment to put there. You should have a closer look at those.
* I don't quite understand how the transformation matrix works, so I couldn't put reasonable comments on those methods.
If `off` is the same as `visible`, couldn't we just use the same private variable `_visible` like this:

```
  bool get off => _visible;

  set off(bool value) {
    if (value is bool) _visible = value;
  }
```