Create deallocate matrix function
Add matrix multiplication test

* Fix matrix multiplication test, for loop can't be used in the beggining
because m1 and m2 are still not initialized, changed to a really simple
formula that works only for the exact specified matrix
* Print a newline before printing the matrix in print_matrix for better
readability
Define strassen function for multiplying matrices

* Algorithm still not implemented
* First step done - Resize matrix to a power of 2 size completed with zeros
* Define resize_matrix function for strassen algorithm resize
Create strassen_recursive to solve matrix multiplication problem

* Remove **matrix from main() as it was used only to allocate memory and
nothing else (removed allocation too)
* Call multiply test after subtract and sum, deallocate and reallocate
memory for **result, as multiplications expect matrix initialized with
zeros
* Call strassen for testing
* BUG FIX! => Resize **result matrix in strassen function
* Start strassen_recursive implementation => Divide both matrices in four
Implement Strassen MAtrix Multiplication Algorithm

* Implement Strassen algorithm following the coursera explanation and formulas
* It seems that still it is not correctly multiplying
* Add some debugging messages and formulas
FIX MULTIPLY FUNCTION @#$%%@#$

* It was adding instead of multiplying, OH NOES!
STRASSEN WORKS

* It works for arrays that are powers of 2
* Add a valid strassen test comparing to matrices multiplied with the straightforward algorithm
Refactor allocate_matrix function to not use triple pointer

* allocate_matrix returns a pointer to pointer with the new location
instead of simply forcing the pointer to it - better interface
Make Strassen algorithm work for matrices with a size different then a power of 2

* Delete resize_matrix function
* Create copy of m1, m2 and result inside strassen() instead of doing
really confusing pointer arithmetics
* Fix minor issue, print correct matrix in line 43