refactor SigmaPi layer for generating several nodes with different
constrains. Constrains are implemented now through functor and
its corresponding function call operators.
opens the DeepNetwork interface for adding new layers, that
are not provided by OpenANN itself. (Users can implement new layers
now and add them to OpenANN's DeepNetwork)

This commit also provides some small refactorings within DeepNetwork.
Move initializeNetwork() into the initialize() call. This gives more
control for the user to decide, when to initialize the whole network.
(especially useful when unknown hidden- and output
layers are added to the framework).
use indices for managing shared weights in sigmapi layers.
add automatic network initialization within MBSGD Optimizer.
add Gradient testcases for SigmaPi layers (with and without constraint).
Use reference for giving a weight constrain in SigmaPi layers.
Add higher-order node constructors (third, fourth) for SigmaPi layers.
Adjust testcases.
Weight derivatives needs to sum up for shared weights
in SigmaPi layers.
Add SigmaPi layer doxygen documentation.
Merge pull request #11 from Ruun/sigma_pi

SigmaPi Layer