Added self modifying math to strong types

Now expressions like a += 2 will return the strong type of a. Strong
types still devolve in expressions on the form a + 2, and even a + a.
This is because strong types are able to devolve into the underlying
type, which makes it ambiguous to define binary operators for them.

The new operators are defined in a CRTP base class because the compiler
complained about templates in a macro.