Reduce functionality

Hello!

I have implemented the reduce function in the collection file.

This function reduces a known n dimensional matrix into a n-1 dimensional matrix, aplying a given callback to each element in the desired dimension to reduce. A callback should take two arguments, and return a single argument, like for example:

function sum(x, y){ return x+y; }

Now reducing a vector with this callback should go from: [1,2,3,4] to 10. The function has been tested with the 'max' procedure, look in the code to see how easy is now to apply the 'max' function to a matrix.

In theory, every "reducing" function (statistical functions, mostly) can be implemented using this "reduce" function, as it's commonly done in Scheme/Haskell/Python/Hadoop and some other functional-related programming languages.

Also, more testing in the reduce function are needed, specially empty cases and things like that, I know they are not implemented yet, but this is a proof of concept.