most of the work to improve the deftools syntax, minus one piece
introduce lexical bindings for named option arguments