Changed some vector functions to use return values

* Safe because of return value optimisation
Add interpolator class for micromagnetics

* Mostly wrapper functions to have relevant and helpful names
Improvements to vector_helpers.h

* Better error message for cross product

* Implement pass output into argument version of cross in terms of new version

* Function to check vector lengths match (with helpful error message)
Use interpolator class and rvo in micromagnetics elements

* rvo = return value optimisation, return vectors properly from functions
  Without wasting time copying.

* Mostly changes to residual calculations

* Works for the test cases I have working:
  spatially constant experiment
  stuff in self tests