[YaspGrid] Make YaspGrid intersections copyable and movable

With this patch, it becomes possible to copy, move and store YaspGrid
intersections.

This requires less changes than the entities because all required data
is already stored inside the intersection object. So the patch

- Removes all of the custom copy code and just rely on the autogenerated
  functions.

- Changes the IntersectionIterator to contain a complete interface
  intersection object. This avoids creating a temporary every time the
  iterator is dereferenced. On the other hand, we now have to use
  Grid::getRealImplementation() to access the intersection
  implementation from the iterator.

- Changes the time at which the internal state of the intersection is
  made consistent. The intersection contains a method update(), which
  updates the YGrid iterator for the outside cell and the face
  information. This method used to be called in various intersection
  methods which required this information to be up to date. With this
  patch, update() is now called when dereferencing the iterator, which
  allows us to get rid of all the mutable data members inside the
  intersection.
[YaspGrid][Performance] Fix intersection performance regression

When using a range-based for loop to iterate over intersections,
YaspGrid exhibits a very bad performance regression compared to the
old-style approach with explicit iterators. After some digging around,
I still don't fully understand the problem, but I have a fix:

The problem is in some way related to the two iterator movements for the
outside entity in the update() method.

Currently, the YGrid iterator can only be moved by an arbitrary offset
in a single direction. This patch adds a new method that takes a vector
of per-direction offset. The update method then calculates the overall
movement vector that results from the original two movements and then
performs that single movement.

That change fixes the regression, but unfortunately I have no idea
why...

As calling update() is now almost a lot cheaper, I also removed the
check to avoid moving the entity twice - that check actually slows down
the common case of only dereferencing the iterator once per
intersections for me because my compiler / CPU combination does a bad
job of predicting that branch correctly.