Introduce new submodels machinery

This pull request introduces a new machinery to define models. They can be summarized as follows:
1. ty files typically just import a submodel, call the setup() method, if needed change some of the parameters and then instantiate the model by calling the model instance.
2. A deferred instantiation of models is now possible. By calling the setup() method of a submodel, only templates for sheets and projections are created. These templates (SheetRef and ProjectionRef) contain an attribute parameters which is then passed to the actual sheet/projection once the submodel instance is called. SheetRef and ProjectionRef both implement a resolve() method which returns the actual sheet/projection after instantiation. This might be used by Collector.
3. The SheetRef class also has an attribute identifier. This is a dict specifying the sheet more detailed than just the name. E.g. the identifier might be {'eye':'Left','layer':'LGN','polarity':'On'}. The class then overrides the \_\_str\_\_() method to return a string based on this identifier matching the names of sheets which have been used in previous models.
4. The base class for all submodels is SensoryModel. This is an abstract class which provides the structure for the new machinery of setting up models. VisualInputModel is a subclass of SensoryModel, specifying the training patterns of a submodel. EarlyVisionModel is a subclass of VisualInputModel, specifying the retina and LGN sheets. It supports multiple eyes as well as multiple spatial frequency sheets. ColorEarlyVisionModel is a subclass of EarlyVisionModel, and extends it to support color sheets. This class is experimental so far!
5. ModelGCAL is a subclass of ColorEarlyVisionModel (but can be changed without affecting any results to EarlyVisionModel), and specifies V1 according to examples/gcal.ty. Furthermore, it allows multiple lagged projections from LGN sheets to V1 as a motion model.

Submodels lack of more documentation, which will be added soon (see TODO's).

This pull request depends on https://github.com/ioam/topographica/pull/570, https://github.com/ioam/imagen/pull/30 and https://github.com/ioam/featuremapper/pull/10
It's ok to leave this as-is for right now, but it would be nice to move this mechanism into submodels so that each .ty file doesn't have to mess with it. I.e., keep all your logic the same, but just move where it happens. E.g. remove register_global_params, having this file be simply:

    from topo.submodels.gcal import ModelGCAL
    gcal = ModelGCAL() # if needed, specify setup_options
    gcal() # if needed, specify instantiate_options

and then have the SensoryModel constructor do something like this untested code:

    from topo.misc.commandline import global_params
    
    def _register_global_params(self, params):
        """
        Register the parameters of this object as global
        parameters available for users to set from the 
        command line.  Values supplied as global
        parameters will override those of the given 
        dictionary of params.
        """
      
        for param_name, param_value in self.params().items():
            global_params.add(**{param_name:param_value})

        params.update(global_params.get_param_values())
    
    def __init__(self, setup_options=True, register=True, **params):
        if register: self.register_global_params(params)
        super(SensoryModel,self).__init__(**params)
        ...

This may not be the best way to handle global params, but it does localize their support to one spot in the code (instead of in all .ty files), and it thus allows us to reimplement it later without affecting anyone.  It also makes the .ty file so simple that it may sometimes be redundant. Lancet could easily now run with no .ty file at all (just e.g.  ``./topographica -c "from topo.submodels.gcal import ModelGCAL; gcal = ModelGCAL() ; gcal()"``)

Of course, it probably only works properly for a single SensoryModel instantiation, but that's all we need right now.