Add basic working implementations
Add test driver
Add some explanatory comments
Refactor lots of the internals

* Fix bug that cache wasn't being invalidated due to using `m` instead
  of `invmatrix` (now `altx).

* Reflavor the cache to be about an alternative representation of the
  matrix, rather than necessarily just inversion.

* Add message indicating when cache is being invalidated.
Move both branches w/in conditional for symmetry

and to have a single exit from the function.
Use set_alt to in set instead of a 2nd assignment
Use multiline block for set_alt

I am not crazy about single-statement-non-block for anything
non-trivial; it makes it to easy to miss things (see the Apple "goto
fail" SSL bug for example).