WIP: neater internals for run_ica + support for additional rejection
nodes

- reduced redundand code by emplyong a named tuple
- added support for more flexible deteciton critera. Now target as well
as non-target scroes take indices or thershold. The kind of detection
is inferred from type
- additional nodes can be added vie a list of tuples
ENH: make save return self
ENH: adding detect_artifact method + private function

- we now can say:
ica = ICA(*args, **kwargs).save(fname)
ica.detect_artifacts(**args, **kwargs)

or

ica = ICA(*args, **kwargs).save(fname).detect_artifacts(**args, **kwargs)

or

ica = run_ica(*args, **kwargs)
ENH: inplace modification + return self
ENH: catching failing detection for run_ica

- if detection fails due to silly parameters passed,
  the unprocessed ica is returned instead.
ENH: addressing discussion
Merge pull request #5 from Eric89GXL/fix_njobs_clu

ENH: Allow "cuda" if requested
FIX: once more only considering n_jobs < 0
Merge pull request #447 from dengemann/fix_njobs_clu

FIX: fixing n_jobs arg + adding exception in spatio-temporal clustering
Merge pull request #427 from dengemann/ica_notebook

WIP: neater internals for run_ica + support for additional rejection nodes
ENH: Better error info
API: Move estimate_rank function out of raw
ENH+FIX: Making CUDA resampling more efficient, fixing DC/Nyquist error