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