Beginning proper rvalue decay - both frontend and backend

This is partly for feature/asm, but a general benefit for how lvalues
are handled in the backend.
Remove f_lea / lea_expr and use lval2rval instead
Correct lvalue-struct access
Backend doens't need to special case V_SPILT_REG
Move 'cond' release to impl_branch from out_ctrl_branch
while and do statements decay their conditions
Fix struct constant/address-folding
Fix struct assignment/assignment-rhs lval2rval
assert() we don't dereference float registers
Don't special case V_REG_SPILT in impl_store()
Don't decay copy-initialised struct operands
Rename lea_expr() to gen_expr() - one and the same
Fix x86_64 float-to-int truncation
Framework for type_to_str(..., TY_STR_NO_TDEF)
Add -f[no-]print-typedefs
Merge branch 'feature/lvalue-conversion-backend'

This brings in correct lvalue-to-rvalue decay semantics and a partial
tidy-up of the backend special casing.