Improvements and tweaks to the preprocessing workflow

- The artifact detection code now uses robust metrics (median and median
  absolute deviation). Previously, it used mean and standard deviation.
  **Importantly**, this means that the your intensity threshold should be
  adjusted by a scaling factor to provide a similarly stringent threshold.
  As a general rule of thumb, 1 SD is about 1.48 MADs.

- Added white noise spike detection. This is controlled through the
  ``spike_threshod`` in the experiment file. It is also in units of median
  absolute deviation. It is ``None`` by default, indicating that no volumes
  will be excluded for white noise spikes. Additionally, a plot that can be
  used to diagnose spikes has been added to the artifact detection report.

- Changed the derivation of the brain mask. Previously, this mask was
  intensity based (although the intensity threshold was determined within a
  mask output by BET). Now, the Freesurfer segmentation is used to define
  an anatomical brain mask, which is then transformed into native run
  space. This should avoid losing voxels in magnetic susceptibility areas
  like ventral temporal cortex.

- Otherwise updated the preproc report with better summary figures.

- Also converted most of the preproc workflow functions to full-fledged
  interfaces and added some utility functions to make this code simpler.