added merge method to Model - still need tests
Merge branch 'master' of https://trac.orr.noaa.gov/git/PyGnome into merge_models
OrderedCollection:
updated remake() to _remake and call it internally after removing element
cleaned up remove() and fixed callback so it happens after removing element
discovered a bug in OrderedCollection and fixed it
updated tests
better to leave _remake as remake(); not automatically invoked on delete
updated test since reverted the change to automatically calling
remake() on delete
(WIP) working on a new datastructure to map substance to spills. See
below:
substances_spills = namedtuple('substances_spills',
                               ['substances', 'spills',
                                'num_released', 'uninitialized'])

Added some iterators and tests - need to update *sphinx* documentation
started working on tests for merge functionality
(WIP) deleted itersubstancespills() and replaced with iterss() for
testing. iterss() will be used by release_elements(). Still working on
this but expect weathering code to use itersubstancedata()
create mock_oil objects instead of dict - always want the same instance
of mock_oil object for say 'oil_conservative' otherwise equality fails
added a substance ArrayType
corrected dependency on repoze
Merge branch 'master' of https://trac.orr.noaa.gov/git/PyGnome
SpillContainer
- added 'substance' data_array only if more than one substance is modeled
- if only one substance, then the data for the substance just references
   the _data_arrays
- store substance data arrays inside _substances_spills structure
- include spills that are 'on' in the above structure
  if spill is not 'on' that substance is not being modeled
  include spills in structure even if 'substance' is None
- defined iterators to iterate through the substances spills structure
    - iterspillsbysubstance()
    - itersubstancedata(arrays)
      where arrays are list of names for arrays expected in the data
      this is used by weatherers so substances that are None are omitted
      from iteration
        - uses _set_substancedata(arrays) to initialize arrays that are
          not yet defined
        - 'data' for a substance is reset if new elements are released,
          or elements are deleted - indicates that data is stale and we need a
          new copy.
- defined a way to update the master _data_arrays from the copies stored within
  the substtances_spills structure: update_from_substancedata()
updated model tests to reflect changes
array_types.py + spill.py
- added 'frac_water' for fraction water content in emulsion. It will be
  per LE and is currently not being used/set.
- moved this out of Spill

evaporation.py
- refactored evaporation to use itersubstancedata(arrays) to iterate
  through data per substance

intrinsic.py
- also moved 'frac_coverage' scaling of 'area' array into IntrinsicProps
  not yet implemented correctly, but will do this computation in
  IntrinsicProps so the 'area' array will already be scaled by the
  fraction of oil coverage
cleaned up a condition in test
removed unused iterator. Fixed tests.
- added frac_coverage to array_types

Not encouraging the modeling of multiple substances in one model;
however, SpillContainer was restructured to support this more easily by
grouping data by substance. To make a test work, the
'mass_components' array must be initialized to same size - will need to
rework this if we choose to support multiple substances, but for now, it
defines the size of mass_components array to largest number of mass_fraction

IntrinsicProps() updated to itersubstancedata()
also doing a weighted average by mass for density and viscosity
added a test for two spills with two different substances. This just
tests that the code handles this without failure and the data for each
substance is being set correctly. The two substances are treated
independent of each other - it does not model the physics with spilling
two different substances. Just testing the code structure not the physics.
add viscosity only if property is found for substance