Added matrix transpose operation.
Added distributed matrix multiply 2 different naive methods for now

one transposing the matrix up front (not good - datasets with too many rows can not be transposed in our current implementation) and then simply going over (now compatible) columns of x and y, the other capturing the whole rows of x and shipping them over to remotes (works, but slow essentially replicates x on each node, not at once but network traffic will be an issue if x is large).

Neither is particularly fast