This PR improves the performance of the transpose and join kernels in the CPU backend. The previous approach was naive and was not optimized for data locality. This new version is slightly improved and uses a tile based approach to speed up the operation.
The join kernel is improved by using a memcpy call instead of a for loop to perform the copy to the output matrix.
Fixed several warnings using the -Wall flag in GCC and enabled it by default in CMake
Fixed a matrix multiplication test where the output matrix was not being tested
Fixed a potential issue with mean where the optimizer could remove some operations that could reduce the accuracy of the result.
Use double to calculate the mean for the random engine uniform tests to avoid overflow issues with larger arrays
Fixed a bug in the DefaultMemoryManager introduced in f211253 where I was dereferencing an iterator before checking if the find function returned an actual value.