Rename inspect() → prepare() and import “inspect” module properly
Use inspect.signature() to get function parameters

* “param_types” keys for variable-length parameters now use the names given
  in the signature rather than * and **.
Support for Python < 3.3 without the signature objects