GenericFluid and GenericNetwork now create a 'pore.map' and 'throat.map' property.  I *think* this was causes problems with map_pores and map_throats in cases where physics or geometries had not been defined everywhere.
Trim now works when Phase and/or physics objects are present
empty pore.map and throat.map are now created in the init...so if no pores or throats are sent the map_pores/throats will still work.
Altered __getitem__ for the network, so that IF 'map' is NOT available it generates one from Ps.  The intention of this is that a subnet WILL have a map, that maps onto the parent network, but that is still work in progress.
map_pores/throats now accepts a 'return_mapping' flag.  If False (default) it errors if mapping cannot be performed.  If True it drops invalid locations in the source and/or target and returns a dict containing the remaining mapping.
- I also removed the logic added to __getitem__ about dealing with missing pore/throat.map and now the _map functions adds pore/throat.map if needed.
Fixes to pore/throat_map and subset so that mapping will work across even a network and it's subsets
Updated documentation for misc.clone_object
Small change to trim that seems to prevent an error about dict changing each iteration
MAJOR update to trim.  It now handles pore/throat.map properly.  Previously, it would not re-index the map values so obj.pore_map would fail for trimmed networks.  This should be fixed now.  Also added a test to the py_test file to ensure the map retains integrity after trimming.
Major improvements to the subset functionality:
- A new method is available in misc called clone_simulation that does just that (see docstring)
- subset is now a part of misc, and it calls clone_simulation, then trims it.
- The subsets file has been removed from Utilities
Minor change to the way print works.  The number of 'valid' elements now also counts the size of the array, not just the number of nans...so if the array is the wrong size it will show up.  This could happen during trim and subset operations.
- Stopped map from creating a map if not present...instead it just generates it from Ps or Ts
- Above change required a fix to trim....needed to trim map first, then all since calls to map generate it from length of all if not present
update to generic phase that shouldve been in last commit
- Major updates to subset.  It now maps correctly within itself
- Updates to clone_object to support the above changes to subset
Cleaned up the trim/mapping test, added throat checks too.
Changed the machinery behind mapping
- Removed the 'pore.map' and 'throat.map' property completely.  This information was already available in the 'labels' in a different form, so the mapping now uses it.  I never liked introducing a new 'required' property...so its gone
- There is now a private method called _get_parent_indices that looks up which pores in the parent network (or fluid) correspond to the local pore numbers
- This method is called in the map_pores and map_throats method, which lets you map between ANY two objects
- Does not work for subnets yet.
Working mapping still
Created a private version of tomask that accepts element and locations.  The public version calls this now.
I "think" the map functions now works the way I want.  No use of 'map' dictionaries, not use of any extraneous parent_indices functions.   And the logic is tight too.
Not sure if this is a good idea or useful even, but you can now use the object.name and get a boolean list equal to pore.all or throat.all returned.  This was useful for doing pn.pores queries, using object names instead of just 'all'.  It uses a bit of magic in the background so may cause more confusion than it's worth.
- This commit is reversible with no ill effects.