Cleanup in handling of global_ptrs and heap arrays

- Changes to global_ptr manipulation to avoid accidental remote
  references (cache pointers locally)
- Many array dims are known a priori from template params, which can in
  turn be used to avoid multiple new / delete cycles
Bugfix: Typo in initialization list for Bin<T>

Missig the ":" after the function signature.
Dropped use of deprecated upcxx::drain()

Now using upcxx::advance(), with arguments specifying estimated upper
bounds on the numbers of incoming and outgoing async tasks to be
dispatched at each call (based on the number of threads).
Proper checks on MPI support in example code

MPI must be initialized for consistency checks in the example code to
work (the latter are one by default). Initialization now performed as in
the test code.
Updated upcxx path in Edison flags.mk