Implemented makeCacheMatrix and cacheSolve

Implemented using lazy evaluation
optional arguments for solve moved to makeCacheMatrix function to avoid
returning incorrect cached matrix when calling cacheSolve multiple times
with different optional arguments.