Matrix inversion

Matrix inversion is usually a costly computation and their may be some
benefit to caching the inverse of a matrix rather than compute it
repeatedly.
This function creates a special "matrix" object that can cache its
inverse