Improvements to combinatorial optimisation:
* extracted clustering into `feature_detectors.cluster`
* using `cartestian` product from sklearn instead of itertools (5x
  faster)
* new iPythonNB for testing CO