[DenseMatrix] Introduce DenseMatrixAssigner for initializing dense matrices from arbitrary right hand sides

In order to overcome the deficiencies of istl_assign_to_fmatrix() we
propose to always use a struct DenseMatrixAssigner for initializing a
dense matrix. This class can be specialized by users for any right hand
side to be used in an assignment.  The new mechanism can bei default
implemented using existing implementations of istl_assign_to_fmatrix()
as well.
(cherry picked from commit 0725aff888f62ceefa7dbfed7ed88988de03e186)

Signed-off-by: Markus Blatt <markus@dr-blatt.de>
[DenseMatrix] Use default implementation DenseMatrixAssigner in assignment from primitive types

The default implementation of DenseMatrixAssigner replaces redundant
code in dense matrix constructors taking a primitive data type.
(cherry picked from commit 70bb78cd35cb96d08a784fd0c6aac81af92d6830)

Signed-off-by: Markus Blatt <markus@dr-blatt.de>
Implement read-only IdentityMatrix

This implementation of an IdentityMatrix does not hold any data. It
implements a reduced version of the DenseMatrix interface including a
standard C++ cast operator to a Dune::FieldMatrix. This code illustrates
the new forward capabilities of DenseMatrixAssigner.
(cherry picked from commit 64df62745d93fbe6c380a039eebb5a3ac8f0da0c)

Signed-off-by: Markus Blatt <markus@dr-blatt.de>
Improve message of static assertion in DenseMatrixAssigner

Make more precise statement to the user if no template specialization
of DenseMatrixAssigner is found. Also use dune_static_assert instead of
static_assert.
(cherry picked from commit d58db46d202d3edf94075110a5bf18dc5c878e6d)

Signed-off-by: Markus Blatt <markus@dr-blatt.de>
[release] DenseMatrixAssignerImplementation is now a class everywhere.

This fixes a Clang warning.
(cherry picked from commit bb245b8b6c17fd1216abafc332dc47395dc238be)

Signed-off-by: Markus Blatt <markus@dr-blatt.de>