Add a resize component.

* timestream/manipulate/__init__.py (PCExBadRunExpects.__init__): Change message
to a more general tone
* timestream/manipulate/configuration.py (PCFGConfig.createSection): There is
the possibility of adding an empty configuration node.
* timestream/manipulate/pipecomponents.py (ResizeImage): New component. Will
accept a tuple and a percentage value as hints to how the resize should take
place. Resize can upscale or downscale. We are using
skimage.transform.{resize,rescale}
Catch general errors in the parent __call__ method.

* timestream/manipulate/pipecomponents.py (PipeComponent.__call__): Only
PCExceptions get propagated correctly through the pipeline. Here we translate
"general" exceptions into a PCException.
(ImageUndistorter, ColorCardDetector, ImageColorCorrector, TrayDetector,
PotDetector, PotDetectorGlassHouse, PlantExtractor, ResultingImageWriter,
ResizeImage): Remove the explicit catching of RIException
* timestream/parse/__init__.py: use self.path instead of self._path in
RIException.
Call LOG.info only once.

* timestream/manipulate/pipecomponents.py (PipeComponent.__call__): Call
LOG.info in parent __call__ method. Child instances need not worry about this
log line... ever!
Enable selection of config files in pipeline gui.

* scripts/run-pipeline.py (_addDir, _addFile): New general methods to select
directories and files.
(_addInput, _addOutput, _addPipeline, _addTimeStream): New methods to add Input
directory, Output directory, Pipeline yaml file and Timestream yaml file
respectively.
(_runPipeline): Accommodate new methods in _runPipeline
* scripts/run-pipeline.ui: Add four new buttons to specify additional
configuration aspects.
If ts has less than 10 images don't add it.

* util/derandui.py (DerandomizeGUI._addTS): Raise RuntimeError if ts has less
than 10 images.