Change class name to ImagePotHandler

This name suggests a more general functionality for the ImagePot class.
* timestream/manipulate/plantSegmenter.py (ImagePotHandler)
(getInitialSegmentation, segment): Change the instantiation call and also give
a better name to the instance variable (iph instead of ip).
Make the pipeline demo args work again.

* util/pipeline_demo.py: Remove the Joel local environment variables. Since we
now include the yaml file from the timeseries dir, we expect 3 instead of 4
arguments. Also removed an unneede comment.
Reposition PotSegmenter classes for scope purposes

* timestream/manipulate/plantSegmenter.py (PotSegmenter)
(__init__, segment, PotSegmenter_KmeansSquare, __init__, segment)
(calcKmeans, getInitialSegmentation): Placed all PotSegmenter related elements
before ImagePotHandler.
Put segmentation logic in ImagePotHandler

* timestream/manipulate/plantSegmenter.py (ImagePotHandler.__init__): Add
PotSegmenter and ImagePotHandler as init arguments. The first is the one that
does the actual segmentation. The second is there for reference. Also add some
checks to the init method.
(ImagePotHandler.mask.setter): Remove method from class. Mask will only be
settable through the getter property.
(ChamberHandler.process): Add the segmenter object to each image pot handler.
This should happen in some other more intelligent way. We leave it like this
for now.
Add visualize option to pipeline_demo script

* util/pipeline_demo.py (visualise): the third argument to the pipeline_demo
scritp is a boolean string. If 'false' there is no visualization, its true in
any other case.
Add logic to Calculate and Save Features

* timestream/manipulate/pipecomponents.py (FeatureExtractor): New pipeline
component that calculates the features for each pot.
(ResultingFeatureWriter_ndarray): Saves the features using
numpy.savez_compressed to save the feature array as numpy.ndarrays.
* timestream/manipulate/pipeline.py (__init__): Updated pipeline component
list.
* timestream/manipulate/plantSegmenter.py (FeatureCalculator): New class that
will hold all the methods to calculate features. Does not hold any internal
state, just the methods.
(ImagePotHandler.calcFeatures): New method that generates all features for
that pot.
(ImagePotHandler.getCalcedFeatures): Returnes all features that were
calculated.
(ImagePotMatrix.potIds): New method that returns all the pot ids in the
matrix.
(ImagePotMatrix.potFeatures): New method that returns all the features
Remove uneeded comments

* util/pipeline_demo.py: Removed uneeded comments.
Timestamp the feature array.

* timestream/manipulate/pipecomponents.py : The current timestamp is located
int time stream image object in the context dict. We use unix time for now.
Remove the ChamberHandler class

All that logic can be in the PlantExtractor pipeline component.
* timestream/manipulate/pipecomponents.py (PipeComponent.show): New method for
the parent class.
(PlantExtractor): Add all the logic that was in ChamberHandler to this
component.
* timestream/manipulate/plantSegmenter.py (ChamberHandler): Remove uneeded
class.
(segmentingMethods): New package dictionary containing relation between
segmenting method name and its respective class.
Add pot id when creating ImagePotHandler

* timestream/manipulate/plantSegmenter.py (ImagePotHandler.id): New attribute
for the ImagePotHandler class. Can be any immutable object.
(ImagePotMatrix.__init__): We use the same indexing logic that is used in the
detect pot pipeline component. We should eventually initialize ImagePotMatrix
at pot detection time.
Use the pot ids in the saved feature array.

* timestream/manipulate/pipecomponents.py: Remove FIXME comments.
* timestream/manipulate/plantSegmenter.py (getPot): Use the actual pot ids to
fetch the relevant pot.
(potIds): Gather pot ids from the pots themselves.
Remove repeated loop and raise error when outfile exists.

* timestream/manipulate/pipecomponents.py (__init__): Raise an error when
output file exists.
(__call__): Remove repeated for loop to increase readability.
Add component to output to a csv file.

* timestream/manipulate/pipecomponents.py (ResultingFeatureWriter_csv): New
component that saves features to files with the names of the features. It will
put all the files in a directory specified by the user.
(ResultingFeatureWriter_ndarray.__init__): Raise error if path exists.
* timestream/manipulate/pipeline.py (complist): Add new component to the
component list
* timestream/manipulate/plantSegmenter.py (featureMethods): Change this to a
class method. So now the call is FeatureCalculator.featureMethods.
(ImagePotHandler.calcFeatures): Change the way we call featureMethods.