Added std::hash<SharedMember<T>> implementation

This allows SharedMember<T>s to be added to unordered_sets and the like.
Added runStageIntra()/runStageInter() methods

These allow you to determine whether the simulation is currently in an
intra stage or inter stage without having to check all the possible
values returned by runStage().
Changed SharedMember hash to use shared_ptr's

shared_ptr uses the underlying pointer, which maps to the actual
created object.  Using the eris_id_t wasn't good, because it can change
(even when the fundamental object hasn't changed).

Since: {1. add to unordered_set, 2. remove object from simulation, 3.
find in unordered_set} should work, relying on the eris_id_t won't
work.  Relying on the pointer should be decent, however.
Added zero(Position) overload

zero(pos) creates a zero-position of the same dimensions as pos.  It's
a shortcut for zero(pos.dimensions).
Added bool operator for testing non-zero Position
Made bool operator explicit