refs #9194. First implementation of algorithm.

Lots of work still to do yet. But on some basic tests generates expected
component images (MD workspaces). One thing that will need to be solved
yet, is what strategy for background detection to use. Also speedups will
be required across the board.
refs #9194. Algorithm seems to be working well.

Working on providing a test suite for the algorithm.
refs #9194. Tests added.

Not a complete test suite yet.
refs #9194. Complete set of functional tests.

Clearly more testing is always possible, but the functional tests present
here, as well as those on the worker ConnectedComponentLabelingTest suite
provide a decent and useful saftey-net for my upcoming refactoring and
performance improvement work.
refs #9194. Add performance tests.

We know that things aren't fast because we've paid no attention whatsoever
to performance. This provides a top-level benchmark for making
improvements.
refs #9194. Add input validators.
refs #9194. Refactor PeakBackground into separate physical location.
refs #9194. Move permutation calcuations to init.

These are dimensionality and grid size dependent. They can be performed
once because the itertor and mdhistoworkspace at large has a fixed
dimensionality. Avoids having to redo the calculation on every
findNeighbour call.
refs #9194. Kill loops and parralelize remaining loops where possible.

Remove loops that are not required. Use OpenMP to parralelize existing
loops. Major change is to pre-calculate background indexes in parallel
since the calls to BackgroundStrategy.isBackground() could be expensive.
refs #9194. Reserve neighbours to avoid resize on pushback
refs #9194. executeAndIntegrate on ConnectedComponentType.

Move integration onto the ConnectedComponentLabel type. This eliminates
the need to have two separate loops over the same data.
refs #9194. Remove need for std::find.
refs #9194. Tests no longer match restrictions.
Merge branch 'feature/9194_connected_component_algorithm' into develop