Extract the generic heat diffusion algorithm to its own classes and add tests

The heat diffusion problem: The input is an image with bounded domain
partitioned to two sets: a boundary set, B, and an interior set, I.
The values at B are known, and I are unknown. We wish to find the
unkonwn values x at I according to the Laplacian equation
 x = (x_1 + x_2 + x_3 + x_4)/4.0, where x_* are the neighbors of x.

Two algorithms are implemented in SolveHeatDiffusionProblem.  Solve()
finds the solution exactly using Eigen. SolveIteratively() implements
the so called standard iteration, which, if run only a few iterations,
won't give a solution that is close to the original but is nonethless
smooth.

The included tests verify the so called "linear reproduction"
property, i.e. if the boundary values are sampled from a linear
function, the results evaluate to the linear function exactly.