Replacement for @raoulb pr#914

See #914

ToDo:
- [x] tests
- [x] final rebase
> Why don't we make cst_table a class attribute.

The main reason - this seems to be too specific for the current implementation of this eval() method.

For example, it's too verbose.  Above this cst_table initialization - we do canonicalization of the sign of arg.  So, roughly half values of this table are redundant...  On another hand, we want to mention that `asin(-1/2)` will evaluate automatically too.

> How about "and for some instances when the result is a rational multiple of pi".

Sounds good.