rename Extension to FunctionGenerator and move it into internal:: namespace