[TSImage] implement image cloning & tests

This implements a .clone method of a timestream image to copy by value a
new instance of TSImage. This should be used if you're splitting a
pipeline, or just want many outputs. Otherwise, just update the .pixels
value directly if you're in an intermediate step.
[test_classes] fix broken TSImage.clone test
[TS class] Implement write_data + bugfixes

We need a method to call to write JSON data to disk. This is implemented
here.
Fix a few bugs also:
 - jsons should go in _data
 - _data should be created if not exists
 - we should store the data dir for easy access as self.data_dir
 - Always set the version via create
[TS class] reimplement write_metadata

More checks, also make manifest in data dict
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