[la] add VectorSpaces to  VectorArrayInterface

This commit introduces the concept of VectorSpaces to pyMOR.
This involves the following changes:

- VectorArrayInterface gains a 'subtype' property. Two arrays
  are compatible if they are of the same type and subtype.
  (Think of the subtype as, e.g., dimension or a socket for
  communication with a particular PDE solver instance.)
- A 'make_array' classmethod has been added to VectorArrayInterface.
  This method is used as a factory for arrays of null vectors.
  An appropriate 'subtype' has to be provided, when calling
  'make_array'. The resulting array will be of this subtype.
  (What appropriate means, depends on the specific array
  implementation.)
- The methods 'empty' and 'zeros' of VectorArrayInterface are
  now methods (not classmethods), creating arrays of the same
  subtype as the array, they are called upon.
  NOTE: As a consequence, there is no longer an interface for
  creating VectorArrays of arbitrary dimension.
- The new VectorSpace class represents the combination of a
  VectorArrayInterface subclass with an appropriate subtype.
  This data is exactly sufficient to construct new arrays
  using new 'make_array' method. A VectorArray is contained in
  a vector space, iff it is an instance of the subclass and has
  the same subtype.
- VectorArrayInterface gains an abstract property 'space',
  returning the space of the array, i.e.
  'VectorSpace(type(self), self.subtype)'
- The 'dim_source', 'type_source', 'dim_range', 'type_range' attributes
  of OperatorInterface are replaced by 'source' and 'range'
  VectorSpaces.
- The 'dim_solution', 'type_solution' attributes of
  DiscretizationInterface are replaced by the 'solution_space'
  VectorSpace.
- For convenicence, a 'NumpyVectorSpace(dim)' method was added,
  returning VectorSpace(NumpyVectorArray, dim).

Everything in pyMOR has been updated accordingly, except for
playground.remote which at the moment is not working.