Initial Commit of the pipeline configuration.

* timestream/manipulate/configuration.py (PCFGException)
(PCFGExInvalidSubsection, PCFGExInvalidFile, PCFGExInvalidType): Configuration
Excetpion classes
(PCFGSection): New class containing logic that allows handling of the configure
object with separating perions ("."). (e.g. config.pipeline.arg1)
(PCFGConfig): Class with config root logic
Change asOutput to listIndexes

* timestream/manipulate/configuration.py (listIndexes): We generalize the output
method to include a way to list the indexes (without the values).
Add an iterator by index

* timestream/manipulate/configuration.py (iter_by_index): New method allowing
iteration by index. This sets us up for the merge method.
Add a merge method to configuration logic

* timestream/manipulate/configuration.py (listIndexes): We avoid outputing the
"-" character.
(merge): New class method that takes two arguments (A,B);  All what is in a will
be create or replaced in B.
Start using configuration.py for pipeline configuration.

* timestream/manipulate/configuration.py (__name): Removed __name from
PCFGSection. We no rely on the containing section to provide the __name
information.
(getVal): It can now return PCFGSection instances.
(iter_as_list): When encountering lists in configuration files we translated 0
to _0 in order to allow point "." naming (python does not allow subsection.0).
This means that the list is temporarily lost. This iterator will return the list
values in order with their index. Only works for subsections that have keys of
the type _{number}.
(asDict): Will return a dictionary  representation of the tree. Does not include
PCFGSection.
(hasSubSecName): New method. Returns True when a subsection has a specific name.
(size): New property. Return the length of __dict__["__subsections"]
(listSubSecNames): New method that returns a list (str) of subsection names.

* util/pijeline_demo.py:Initialize ImagePipeline with the new configuration
instance. All configuration values now come from the plConf instance. Rename the
variables for the general stuff in configuration.
(ts.data): We cannot put the configuration instance because json dose not
understnad it. We pass a dictionary
(opts): Replace -y by -p to signify "pipeline" and create a -t option to signify
timestream; both should point to configuration files and are optional.
(inputRootPath): Add some checks for this path.
(merge configuration): New section in the pipeline_demo that adds all the data
in timestream configuration file to the pipeline configuration file.

* timestream/manipulate/pipeline.py (__init__): Use iter_as_list to initialize
the pipelien components
Add comments specifying config files.

* util/pipeline_demo.py (result): Add examples of configuration files.
id -> potID

id is a python method. We should avoid replacing these.
* timestream/manipulate/plantSegmenter.py (ImagePotHandler__init__): id->potID
Add softBindings

* timestream/manipulate/plantSegmenter.py (ImagePotHandler): Add softBindings
dictionary. This will contain relations of the pot to other elements in other
contexts. This will set us up for relating pot ID to chamber ID and will
ultimately allow de-randomization.
Add ImagePotRectangle class.

* timestream/manipulate/pipecomponents.py (plantExtractor.__call__): Perform the
growM calculation at this stage instead of in the ImagePotMatrix class.
* timestream/manipulate/plantSegmenter.py (ImagePotRectangle): New class with
all the nitty gritty calculations for rectangles in images.
(ImagePotHandler): Put all the rectangle previously contained in ImagePotHandler
in the new ImagePotRectangle.
Remove "trays" from ImagePotMatrix

ImagePotMatrix will organize pots by ID, not by tray. The tray information can
still by added as an additional binding.
* timestream/manipulate/pipecomponents.py (PotDetector.__call__): Create the
ImagePotMatrix as soon as we detect the pots in PotDetector.
(PlantExtractor): We now expect a ImagePotMatrix object in the arguments.
* timestream/manipulate/plantSegmenter.py (ImagePotHandleriphPrev): We put this
in a property and use _iphPrev internally.
(ImagePotHandler.setSbind): Allows the creation of an arbitrary binding for each
pot.
(ImagePotMatrix): We remove the tray class and have a simple dictionary of pots
indexed by the potId.
(ImagePotMatrix.addPot): New method that adds pots to the matrix dictionary.
Add tray binding to each pot

* timestream/manipulate/pipecomponents.py (PotDetector.__call__): Add tray id
for each pot.
* timestream/manipulate/plantSegmenter.py (setSbind): Fix error in var name.
Create a new file timestrea/manipulate/pot.py

This will have the pot related logic.
* timestream/manipulate/pipecomponents.py: Remove pot related logic
* timestream/manipulate/pot.py: Copy paste from pipecomponents.py