Replace 'double' in return value of the norm methods

Replace it with	typename FieldTraits<field_type>::real_type

This fixes two problems:
- norms don't return complex number types when instantiated
  for complex coefficients
- You can now instantiate BlockVector for field_types that do not
  auto-convert to 'double'