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.
Merge pull request #138 from Joelgranados/devel

Resize component
move some common calls in pipecomonents to parent class
Enable selection of config files in pipeline gui
Update configuration.py

* timestream/manipulate/configuration.py (PCFGExLockedSection): New exception.
We raise it when we try to change the configuration and its locked.
(PCFGSection.{_name,_locked}): New variables. They have to be accessed through
(PCFGsection.{lock,unlock,locked}): New methods that to control the locked
status.
(PCFGSection.listTree): New name for listIndexes.
(PCFGSection.iterTree): New name for iter_by_index.
(PCFGSection.iterSections): New method that will return all subsections from
this level.
(PCFGSection.addSubSec): Removed method. __setattr__ does the same thing.
(PCFGListSection): New class to handle subsections as lists. Subclassing is the
better way to do what we already were doing with iter_as_list. This subclass
will handle indexes that are supposed to be preceded by "_".
(PCFGConfig): Use new methods from parent and related classes.
* scripts/run-pipeline.py (genConfig): Iterate as itersections.
* timestream/manipulate/pipeline.py (__init__): addSubSec -> setVal
Add predefined config to configuration.py

This will allow to express our expectations on the configuration passed by the
user. It will also make the documentation easier.
* scripts/run-pipeline.py (genConfig): Most of what was here is not in
configuration.py.
(options): Small change where the user can now choose between -i, -p or both.
In the case where we receive input both in -i and in -p, -i trumps -p.
* timestream/__init__.py (add_log_handler): Correctly use LOGV.VVV
* timestream/manipulate/configuration.py (PCFGException.__init__): New method to
add message for general error.
(PCFGSection.getVal): Add a new argument pop. When True we remove the index from
the section.
(PCFGSection.setVal): We now allow setting of a PCFGSection.
(PCFGConfig.argNames): Class variable. Its a Json parseable string that
represents all the configuration options that are accepted. Note that the
individual component configuration are not here and should not be here. We can
define argument name, default value, type, whether it is required, documentation
and examples.
(PCFGConfig.__init__): We now force the configuration to have only three zero
level sections: pipeline, general and outstreams.
(PCFGConfig.append): This new method replaces merge. We can now append new yaml
files and decide if we want to overwrite or just add. It enforces the three zero
level sections and adds everything that is left to the general section.
(PCFGConfig.autocomplete): New method that tries to guess configuration values
based on what is already in place. It also casts values into relevant objects.
(PCFGConfig.loadFromFile): New method. Contains the old loadFromYaml as an inner
method.
(PCFGConfig.merge): Removed method.
Activate documentation for the cli

* scripts/run-pipeline.py (maindoc): New method that executes the documentation
printing.
(main): Add new maindoc method call.
* timestream/manipulate/configuration.py (PCFGConfig.info): New classmethod that
prints our all the relative information about the expected configuration.
(loadFromFile): We use cls to signify class.
(PCFGConfig): Change argNames into a python structure instead of a json string.
Add documentation for pipeline and config files.

* doc/config.rst: Add output of run-pipeline --doc --comp --conf. We should
switch to automatically generating this part of the documenation.
Update the authors on the documentation config.

* doc/conf.py: A more general name for author is "TimeStreamLib Team"
Update one line description.
Add skimage deps to preinstall_requirements

* preinstall_requirements: add networkx and pillow