Added hierarchical learning algorithms

There is now the possibility of defining a hierarchical learning
algorithm. This is defined by the HierarchicalLearningAlgorithm class,
and constructed in the configuration file using the
construct_hierarchical_algorithm function.
At every internal node, an Aggregator object is used to define the new
output. Two aggregators have been defined: RangeAggregator and
SubsetAggregator. The corresponding test classes have also been added.
Small change in installation script

The change is used to warn the user of the functionality depending on a
library, before the user chooses whether or not to install it.