remove dead code
Add some pure nothrow attributes
TODO
Add scalar multiplication
Simplify naive algorithms

Seems that array-wise expressions can be used instead of explicit
calculation of indexes and looping.

Has the result that the functions could no longer be marked as
"nothrow". Not sure if this is a loss or not.

As these are simple algorithms it is probably neither here no there
on how this change affects large matrices. Still, would be
interesting to see how memory use is affected by this change.
forgot to update the TODO list
update the TODO list
Add naive multiplication

The following changes made this addition possible
1. clean up the contructor unit tests
2. add additional indexing
3. refactor the indexing unit tests
4. fix the contracts on the indexing functions
5. remove pure for now since it made debuggin difficult
   and the benefit is still unclear to me
update the TODO list