Dyadic code for vector module

Has been based off #7566 
Adds code for dyadics, with tests.
Also restructures the Dyadic and Vector code into a nice Object-Oriented structure with the introduction of a common super class.
When called with `dyadic.dot(other_thing)` is there ever a reason to use `rdot`? I'm not seeing the use case for `rdot` or `rcross` to be used explicitly.