Split iterator_adapter implementation.

I WANT static_if. This would be SO much easier.
Add hash and update math.

hash: Added
math: use const&. Rename dot->operator^ cross->operator&.