Extract reusable getArgName
Ensure Apply <: Term
Implement also let

Do it twice: as a standard derived operation and as a macro. And add a
test showing the problem with the first version.