First cut at translating Paul Riseborough's Matlab to Haskell.
Require exponents to be constants.

This simplifies various differentiation and simplification rules.
Push constants as far up the expression tree as possible.
Force Add/Mul into a consistent associativity.
Special-case Show Sym for sqrt/cbrt.
Show subtraction/division for any negative factor.
Complete Num instance for Sym.
Add last bits from GenerateEquations21states.m.
Parameterize Sym over the type of variable names.
Push VarName up to Kalman--not needed in SymDiff.
Make Quaternions a Functor.
Make quaternions Foldable.
Separate types for nav and body frame coordinates.

Besides allowing me to use Num instances to simplify some expressions,
this also caught an error I made while transliterating from Paul's
original Matlab source. In the definition of pNew, I used `dv` when I
meant `vel`, which is semantically wrong and also in different
coordinate systems.
Note another oddity of Paul's definition of qNew.
Hardcode the gravity vector used in Paul's code.
Use trapezoidal integration for position updates.

This is what Paul's code does in UpdateStrapdownEquationsNED.
Revert "Require exponents to be constants."

I'm going to write an instance for Floating and I want to use (**) and
log in the obvious ways instead of writing custom operators for them.

This partially reverts commit ed4f91fcb95d28021e4e0ec6167e800dd3ecf5ed.

Conflicts:
	SymDiff.hs
Implement part of Floating for Sym.
Fractional Sym instance: implement `exp`.
Support differentiating trigonometric functions.

Spot-checked against Wolfram Alpha for a few examples, such as:
- sin (x ** 2)
- sin x / x
- asin (x ** 2)