Move compatibility code to separate module

Common code should be shared between decorator and astorator.
Move more common code to separate module
Rework ASTorator

- use python3 style inspect.Signature
- encapsulate functionality in class
- improve handling of function name
- handle invalid/None function names as lambdas
- handle return annotation