Fix type declaration of constants

The size constants for the test arrays were defined as having the same
type as the data elements. This would be a problem if running with a
large array of small typed integers (e.g. unsigned short)
Implmentation of maximum surpasser

This is the algorithm from chapter two. It has been significantly
modified and has much more imperative style than the original. Notably
the recursive definition of table has been changed to a simple
initialization of singlet tables (the base case for the recursion),
which are then merged together to form the output.