Testing GCC diagnostic push/pop method of getting around unnamed struct warnings.

- Added explicit to appropriate constructors.
- Fixed #elif <preprocessor token> to #elif defined <preprocessor token>
Toying with templating math library based on dimension and type.

Potential pros:
- Never tried it before, would be good to have tried both ways.
- Would help prevent repetition between different dimensions.
- Good chance to practice templates (something I rarely do), albeit a relatively simple use of
  them.
Potential cons:
- Could eat up time. Might be far more than I'll need.
- Could be less efficient.
- Could increase compile times noticeably.