This allows you to use ArraySlice and other collections (including
user-supplied ones) with Surge as long they are represented as
continuous arrays in memory.
All pointer use should happen inside a `withPointer` block so that the
compiler is aware of this unmanaged access. Fixed this everywhere and
added a few helper methods to make it less unwiedly.
* Add `subscript` supports return specific rows or columns
* Add support for scaling matrix by row or by column.
* Make `pow` supports applying to every elements in vector.
Make Matrix confirms to Equatable and add some tests
Implement set columns in Matrix, add test for it
Add Test for element wise multiplication