[ refactor ] Adding phantom types

Some of the functions were unsafe to use with non [R.zero]-free
matrices. Now the phantom types track down this invariant thus
preventing the library user from making silly mistakes.

We still need to define good [mapRows], [tabulateRows], etc.