refs #9257. Working new parallel implementation of clustering.

Clustering now works on a fundamentally thread-based basis. We then
combine labels between the individual results for label ids that are
otherewise equivalent. This seems to be working at least in the 1D test
cases I have provided, but the implementation will need further work, and
I must unbreak the Integration routines I have affected with these
changes.
refs #9257. Extend tests to nThreads. Fix logic error.

Tests extended and refactored. The multithreaded schenario now has some
good test cases. I had to fix a bug where empty labels were being
processed via a label map. However empty labels always have an id of -1,
so weren't being found in the map and this was causing a null pointer
exception further down the line.
refs #9257. Move more into parallel blocks.
refs #9257. More documentation.
refs #9257. Track clusters.

Cluster extracted to it's own type in it's own physical structure.
Clusters are now passed around. Tests added for the cluster type.
refs #9257. Move PeakTransform to Mantid API.

This allows the PeakTransform to be used in multiple projects. It is required in Crystal where Peak coordinates must also be properly selected and transformed according to an IMDWorkspace setup.
refs #9257. Starting to fix integration.
refs #9257. Have the integration working.

Have the integration working parallel and non parallel. Peformance tests
have reduced in speed by 1/2 so now run in approximately 1/2 a second. The
non-parallel version runs quicker than the parallel version indicating
that some work still needs to be done to improve the speed of the merging.
refs #9257. Make integration thread safe.

A very simple solution to a threading issue. We can safely process the
peaks list in parallel if the integration can be guaranteed to be thread
safe. By making the interation a const member that simply returns the
results we do this. Therefore concurrent thread access will cause no side
effects. This Will allow us to handle the case where the user has selected
a threshold such that two peaks end up sitting on the same cluster and
therefore the integration method could be entered simultaneously.
Functional programming had the solution.

Also, I've made some changes to reduce the amount of work happening to
determine the Clusters which are unresolved. I can avoid this duplication
because for each indexpair that gets registered, there will always be a
duplicate (there has to be as each unreachable neighbour for one process
index is itself an unreachable neighbour for another process index) and
therfore only one cluster needs to be entered into the vector.
refs #9257. Do writeTo in parallel.
refs #9257. Extend tests for cluster type.
refs #9257. No need to specify the radius any more.

Part of the speedup is removing the PeakBackground strategy for the
simplier Hard threshold. We also have no need to use the radius. This is
nicer as we just let the algorithm figure out the integrated region
associated with a peak with minimal help (other than the threshold of
course).
refs #9257. Add diagnostics
refs #9257. Fix critical bug.

Also added reporting back in.
refs #9257. More performance work.

Also start fixing a bug whereby the cluster offsets can become larger than the range of an integer. This has been partially fixed by better calculating the number of possible clusters that could exist. The full fix should be to also change the type of m_id in DisjointElement from int to size_t!

Another issue that is being worked on here is a faster clone of the MDWorkspace. We only care about it's shape, so we just need something the right size to start putting data into!
refs #9257. Add clone method.
refs #9257. Update documentation. Fix RHEL6 header issue.
refs #9257. Find and fix another bug.

Unit tests revealed two bugs in the updated merge logic. Tests now pass
again.
Merge branch 'feature/9257_ccl_performance' into develop