Canica

Cleaner version of the CanICA algorithm. This PR does not only refactor the algorithm but bring a bunch of new core tools for algorithm development.