Fixed Math, Added Opposite, aligned constructors.

Added getOpposite and isOpposite methods, As well as reviewing and fixing the math for the secondary ordinal directions, but I'm still not convinced they should even be in the API.
The other alternative is having a computeOpposite instead of a getOpposite that uses a switch statement or some other lookup.

I was going to use axis and invert all the axis, but it started getting tricky with the NNE like directions having math, meaning I would need to use a map rather then an array with indices.