Experimental support for a "progress" thread

The progress thread runs in the back ground (during calls to update())
and periodically drains the task queue - ensuring forward progress even
when no upcxx calls are executing.
Caveats:
- the thread must be started by the user
- the thread only lasts for the current commit epoch
- it is erroneous to call upcxx functions while the progress thread is
  running, and the results are undefined
- support is enabled at compile time with ENABLE_PROGRESS_THREAD

Preliminary tests show improved performance for larger core counts when
using the progress thread, as opposed to simply calling drain() during
bin flushing.
Large documentation cleanup

Motivated by documenting the new progress thread support. Internal data
structures and functions are no longer included in the documentation by
default, and must be requested by adding INTERNAL_DOCS to the
ENABLED_SECTIONS option in doxygen.conf.
Minor formatting correction
Minor doc correction
Cleaned up includes / defines
Revised down sleep time for progress thread

Based on benchmarks on large process grids (16 x 16 for now)
Minor cleanup
Organization / documentation cleanup
Additional cleanup in convergent_matrix.hpp

- Mostly focused on cleaning up the constructor (e.g. moving
  initialization of the distributed storage arrays to a different
  method, moving initializations to the initialization list, etc.)
- Also removed explicit loops for array init and copying (std::copy and
  std::fill now)
Reliability fix in MPI-bases load() / save()

Need additional synchronization within these methods after (re)expansion
in place occurs - once this has completed on all threads, only then can
operations on distributed matrix elements begin again.