[GridFunctionSpace] Don't make the stored GridView const

We might want to update the underlying GridView if we want the
GridFunctionSpace to survive operations like adaptivity and / or load
balancing.
[GridFunctionSpace] Store constraints engine as shared_ptr and allow passing a shared_ptr to the constructor

For some weird reason, when the GridFunctionSpace was modified to store
the FiniteElementMap as a shared_ptr and potentially assume ownership of
it, the constraints engine did not receive the same treatment. Usually,
this is not a problem, because most current constraints engine do not
carry any state, so the underlying variable can point at garbage without
any harm, but that is of course not a solution.

This patch changes the GridFunctionSpace to

- use a shared_ptr for storing the constraints engine
- add new constructors that allow passing in a shared_ptr to a
  constraints engine
- export the new shared_ptr via a new method constraintsStorage()
- get rid of the weird defaultce member - if we don't get a constraints
  object, we can just allocate one and store it in our internal shared_ptr