[Tests] Add unit tests for new implicit build mode of BCRSMatrix
[BCRSMatrix] Rename setmymodeParameters() to setImplicitBuildModeParameters()

This one slipped through the cracks when renaming the build mode...
[BCRSMatrix] Improve documentation for implicit build mode
[BCRSMatrix] Clean up BuildModeWrapper

- Don't needlessly specialize the wrapper, we can still do that
  we we encounter the need for it.
- Add some doxygen documentation.
- Clean up formatting.
[BCRSMatrix] Rename BuildModeWrapper to ImplicitMatrixBuilder and add an extended constructor

ImplicitMatrixBuilder now has some more documentation and a second
constructor that takes all required arguments for setting up a matrix in
implicit build mode. So you can now create an ImplicitMatrixBuilder
directly on top of a default-constructed BCRSMatrix.
[BCRSMatrix] Avoid off-by one iterators in compress()

compress() uses iterators that are off to enable a *(++it) = ... idiom,
which already confuses me right now. That confusion will only be worse
when I look at the code again in half a year, so let's clean that up
right now.
[BCRSMatrix] Update maximum number of row entries in compress() on the fly

We iterate over all rows anyway, so avoid the additional loop.
[BCRSMatrix] Fix typo in setImplicitBuildModeParameters

This was obviously never tested - don't try to assign the overflow
fraction to the map holding the overflow entries...
[BCRSMatrix] Improve error handling for implicit build mode parameters

This patch adds checks to make sure the user has actually set valid
parameters before trying to allocate the matrix in implicit mode.
We use a negative value for the overflow fraction as an indicator for
this.

As part of the cleanup, this patch also makes sure that avg and
overflowsize are always initialized to a well-defined value.
[BCRSMatrix] Add safeguards for implicit mode to operator[]
[BCRSMatrix] Improve error reporting in BCRSMatrix

- Introduce new exception BCRSMatrixError and use it throughout
  BCRSMatrix
- Introduce new exception ImplicitModeOverflowExhausted, which is thrown
  by compress() for the implicit build mode. Also improve the error
  message for that exception to really help the user understand the
  problem signalled by this exception and how to remedy the situation.
[BCRSMatrix] Export the type of the CompressionStatistics object
[BCRSMatrix] Introduce new build stages notAllocated (aliased to
notbuilt) and building

Right now, some build modes reuse the same build stage value across
several actual stages. This patch splits the notbuilt stage into
notAllocated and building, avoiding that ambiguity.
[BCRSMatrix] Make sure to always initialize all data members in constructors

Valgrind was complaining about using unitialized values in some places...
[BCRSMatrix] Add checks against calling arithmetic operations on partially built matrices
[BCRSMatrix] Prohibit copying into / out of partially built matrices
[BCRSMatrix] Improve logic in setBuildMode() to correctly handle new implicit mode
[BCRSMatrix] Prevent changing the implicit build mode parameters after matrix construction has started
[BCRSMatrix] Adjust existing build stage checks to new enum values and semantics
[BCRSMatrix] New observer buildMode() to get at the currently active build mode