improved fm elimination (custom matrices)

I was having issues, the math/matrix and it’s interaction w/ Typed
Racket, since the types allows for empty Matrix values (they type check
just fine since (Matrix α) is just equiv to (Array α), but the matrix?
predicate used to filter out valid input for many (all?) of the matrix
operations would throw errors that it wasn’t a valid matrix. This was
frustrating since the implementation of fm I was basing mine off of
used Matlab’s handling of empty matrices. In Matlab empty matrices
(i.e. a matrix w/ at least one dimension = 0) are valid, and operations
on them work find as long as the matrix’s shape fits the operation
(i.e. a (3x0) can be multiplied by a (0x5) because their middle
dimension is equal, as required by matrix multiplication, etc etc…).
Anyway, now we have our own small matrix library that works w/ empty
matrices and it doesn’t rely on typed racket (which should be the case
if it’s used by typed racket).

fm-slim works on all the examples thus far