I was thinking about how `inv`

is almost always the wrong thing to use in code, and how this primarily trips up people without significant linear algebra experience, and I realized that I think the following will be almost enough to trick beginners into thinking we’re doing what they want rather than what they should want. The biggest missing item is probably printing, where we would actually invert the matrix.

```
struct InverseMatrix{T <: AbstractMatrix}
mat :: T
end
Base.inv(A :: T) where T = InverseMatrix{T}(A)
Base.inv(A :: InverseMatrix) = A.mat
Base.transpose(A :: InverseMatrix) = InverseMatrix(transpose(A.mat))
Base.:*(A :: InverseMatrix, k :: Number) = InverseMatrix(A/k)
Base.:*(k :: Number, A :: InverseMatrix) = InverseMatrix(A/k)
Base.:*(A :: InverseMatrix, B :: InverseMatrix) = InverseMatrix(B*A)
Base.:*(A :: InverseMatrix, v) = v\A.mat
LinearAlgebra.det(A :: InverseMatrix) = 1/det(A.mat)
```

Does this seem like a good candidate for putting in Base?