Accuracy of sinh and complex cos/sin

The `sin` and `cos` function for complex arguments, and the `sinh` function for real arguments, are inaccurate when the inputs are very small. This is because `Math.exp(x) - Math.exp(-x)` returns zero for small x, instead of the more accurate `2x`.

This patch replaces `sinh` by a Taylor expansion when the input is small, which increases accuracy.
I think both versions are ok. @BigFav version is more compact, but on the other hand, an explicit else shows very clearly that the second `return` is only occurring in an `else` case (there are rules of thumb that say that every `if` should have an `else` prevents cases similar to these tricky fall-though cases of switches). Both are fine with me.