By default visual studio doesn't provide the M_PI define, so work around that.

It is far to complicated to make sure everything gets included in the right
order for that to happen for a header only class. Instead we provide our own
M_PI define if it isn't already defined.