fixed tanh for input values outside the range [-40, 40]

The current *tanh* layer uses an expression that is unstable for large values.  It returns NaN if the input is badly scaled (outside the range [-40, 40] for single precision float).

This fix uses the *tanh* library function, which is much more stable.  I also added a unit test (there was previously no test for tanh) that checks the case of large input values.