Hungarian algorithm

My contribution to the Matrix Algorithms module is the `O(n^3)` implementation of the *Hungarian algorithm*. It is an algorithm to find a minimal (or maximal) cost assignment of tasks to people from a non-negative square cost matrix. Apart from its regular uses, it is also often used in measuring the performance of machine learning algorithms that label data by comparing it against existing labels for the data -- the best comparison is given by employing this Hungarian algorithm.

I've abstained from paralleling it at this point because I'll need to bring in IO for that. The commit includes `QuickCheck` tests against a brute-force model as well.

Naren