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.
Style note: You have a return statement in the if, so you don't need the else.
``` javascript
if (Math.abs(x) < 1) {
  return x + (x * x * x) / 6 + (x * x * x * x * x) / 120;
}
return (Math.exp(x) - Math.exp(-x)) / 2;
```