PERF: Minimize redundant function calls

The highest percentage of time in the MattesMutualInformation
filter was spent evaluating if specialized work needed to
be done for displacment fields.

In a minimalistic test case, prior to this change the registration
took 846 seconds, after this change, registration took 309 seconds.

bin/BRAINSFit   \
  "--costMetric" "MMI"  \
  "--failureExitCode" "-1"   \
  "--numberOfIterations" "1"  \
  "--numberOfHistogramBins" "50"  \
  "--splineGridSize" "7,5,6"  \
  "--numberOfSamples" "14000"   \
  "--minimumStepLength" "0.1"  \
  "--initializeTransformMode" "useCenterOfHeadAlign"  \
  "--transformType" "BSpline"  \
  "--fixedVolume"  "BRAINSTools-build/ExternalData/TestData/test.nii.gz"  \
  "--movingVolume" "BRAINSTools-build/ExternalData/TestData/rotation.rescale.rigid.nii.gz"  \
  "--outputVolume" "BRAINSTools-build/BRAINSFit/TestSuite/BRAINSFitTest_BSplineScaleRotationRescaleHeadMasks.test.nii.gz"  \
  "--outputTransform" "BRAINSTools-build/BRAINSFit/TestSuite/BRAINSFitTest_BSplineScaleRotationRescaleHeadMasks.h5"  \
  "--maxBSplineDisplacement" "7.3"

Change-Id: I3782e78cae99acfe577a40444882688ae5b76472
PERF: Pull loop termination constants out of loop

When evaluating loops, loop termination criteria that
are accessed via member functions should not be
used at every iteration.  Common static loop iteration
termination values are stored locally and reused.

Change-Id: Ia847f411640cce6921b28ac2a2da448c40ebe24c
ENH: Refactoring the CompositeTransform class

Prefer initialization to assignment (i.e. use class constructors
rather than resize variables).

Add const correctness, and use const references to temporary
local variables rather than copy constructing them.

Change-Id: I79a0dd7e3e22d3e5866b13b343c7f14296293606
ENH: [SG]et optimizable params ITKv4 registration

Currently the only way the initialize the registration configuration is
to set up an initial moving transform. Inside the registration filter,
this initial transform is added to a composite transform along with the
output optimizable transform, and this composite transform is used for
metric evaluation at each iteration.

In this case, we also need to use a composite transform after the
regsitration process to concatenate the initial moving transform and
the output of the registration filter to create the final transform for
the resampler.

Doing all above is a lot of work that is not necessary in many cases.

In this patch new APIs are added to the ITKv4 registration framework
that allow us to directly initialize the output optimizable transform.

The new API is called "InitializeOptimizableParametersFromTransform",
and it provides a new option for iniatialization of the registration framework.
This feature lets us to initialize the optimizable registration transform
directly in a same way as we used to do in ITKv3.

Change-Id: I49a1ee0fd88e289bbc266ea61e68d6d0968fd761
Merge topic 'ImproveRegistrationInitialization'

9c1a5212 ENH: [SG]et optimizable params ITKv4 registration
Merge topic 'PerfMattesRegistration'

73835b81 ENH: Refactoring the CompositeTransform class
cafef89d PERF: Pull loop termination constants out of loop
304448f1 PERF: Minimize redundant function calls