Fix tanh layer for badly scaled input values

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.  It compares against an exact expression for tanh that also handles overflow.  The unit test fails if you use the previous naive implementation.