FuncSpec: remove duplication in names setting
FuncSpec: extract input validation to separate method
FuncSpec: add tests for macros to preserve current behaviour
FuncSpec: extract code generation to separate classes
FuncSpec: move code generators to separate modules
codegenerators: add base class and factory method
codegenerators: 'generate_aux' returns built dictionary