unified handling of transformations & guards

this patch gets rid of guard_expr entirely and uses the transformation
facilities instead; not only reduces this design the amount of code,
it is also cleaner for both maintainer and user