[operators] add 'assemble' and '_assemble_lincomb' to OperatorInterface

This commit introduces several changes to the operator interface:

- Every operator has to provide an 'assemble' method returning
  a non-parametric assembled operator. What 'assembled' means, is
  up to the given operator. OperatorBase implements 'assemble' by
  returning a FixedParameterOperator.
- AssemblableOperator is gone. Caching for non-parametric operators
  is now implemented in NumpyMatrixBasedOperator. If the operator
  is parametric, the result of '_assemble' will, however, not be
  remembered by the operator.
- The default implementation of 'lincomb' in OperatorBase now always
  returns a LincombOperator.
- The 'assemble' method of LincombOperator calls '_assemble_lincomb'
  on the first of its operators, after assembling each these operators.
  As a consequence, NumpyLincombMatrixOperator is obsolete and the
  assembly code is moved to '_assemble_lincomb' of NumpyMatrixOperator.
- NumpyMatrixBasedOperator now expects '_assemble' to return a NumPy
  matrix, which is then automatically wrapped by the 'assemble' method.