ENH: Add GlobalID to Halo data-structure

Added GlobalID ivar which will hold the unique ID of a halo for
all time-steps.
ENH: Remove halo-prefix sum strategy

Removed previous strategy that was relying on
the halo-prefix sum for re-numbering the nodes
in the merger-tree downstream. Instead, GlobaIDs,
i.e., IDs that are unique for each halo for all
timesteps will be computed and assigned directly.
ENH: Method to compute unique range per process

Added method that computes a unique range per process for
a number of items.
ENH: GlobalID numbering across all timesteps

Added code to assign global IDs to the provided halos at
a given timestep.
ENH: Add method Halo::HasGlobalID
ENH: Ensure halo exchange on periodic boundaries

Supply a PeriodicTransofrm in DIY_Enqueue, which is a no-op
function, but may needed by the DIY API to ensure that halos
are exchanged across periodic boundaries.
ENH: Add global IDs to Zombies
BUGFIX: Fix Global ID assignment

Fixed issue wherein duplicate global IDs would be assigned
across timesteps.
ENH: Use global ID when inserting node in tree
BUGFIX: Restrict checking to immediate neighbors

Set the HaloSimilarityMatrix entry corresponding to
ghost halos at the previous (row) and current (column)
timestep to 0 to restrict checks to immediate neighbors.
This is done to ensure that results will be invariant
(hopefully) to the number of processors used.
ENH: Linking Halos based on GlobalID

Updated code to link halos based on the global ID and added logic
to account for halos that are not local, e.g., the progenitor and
descendant lists are updated iff the halo is owned by the given
process.
BUGFIX: Fix asserts w.r.t. Global ID assingment
BUGFIX: Supply PeriodicTransform to DIY_Enqueue

Supply dummy PeriodicTransform functor to both
halo metadata exchange and halo particle ID exchange.
ENH: Use HaloNeighborExchange instead

Use the HaloNeighborExchange object which wraps the functionality
to exchange halos with neighbors.
BUGFIX: Make GlobalID assignment contiguous

Fix issue wherein the global ID assignment logic
would leave gaps between time-steps.
BUGFIX: Remove erroneous assert

Since the merger-tree is distributed, the progenitor may in fact be
coming from another process and not exist in the local tree.
ENH: Remove warning
ENH: Extend HaloNeighborExchange API

Extend API to Enqueue halos to be sent to neighboring
processes.
ENH: Optional "inclusive" parameter to HaloExcahge

Added optional parameter that indicates whether the output
vector will include both local and neighboring halos (inclusive=true)
or just the neighboring halos (inclusive=false). Default behavior is
inclusive.
BUGFIX: Clear out enqueued halos after exchange