initial cut at function documentation
initial implementation of matrix inversion caching.  An obvious next step would be to make it cache arbitrary functions, perhaps with a mapping from function to cached result.