some additions and refactoring

new methods Rows(), Cols(), Size() are useful in expressions on the fly

RowView() and DataView() are useful for directly working on the underlying data using slice functions

NewDense and MakeDense follows the pattern that 'new' returns object pointer whereas 'make' returns object; MakeDense wraps existing slice data into a matrix whereas NewDense allocates a matrix following dimension requirements

util.go and test_util.go hold (and expect more) utility functions

test passed