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