Addition of hypertangent and exponential cases to Partial Differntial Equations 

added code for exponential cases to special denom

added code for tangent cases to special denom

added code for tangent cases to special denom

added hypertangent test cases for param special

- [x] General code cleanup (spaces after commas, spaces around operators, more even line wrapping in the docstring).
- [x] Don't use `as_poly()` with no arguments. 
- [x] Don't use `as_expr()` when it is unnecessary.  There is quite often a method of Poly that will do the same thing, but more efficiently because it stays as a Poly. Converting to Expr and back is expensive.  We should only do it when it is absolutely necessary (i.e., when the result is a rational function instead of a polynomial, and even then, immediately get the numerator and denominator and go back to Poly). 
- [x] Add a least some kind of docstring to every function.
- [x] Make sure that all `Poly` objects constructed in the tests explicitly call the second argument `t`.  Subtly different things can happen when you have a polynomial in t and x instead of just in t (this is also the source of annoying unification errors).