Expand description

This implements ToTokensState for Expression.

For most use-cases, calling this method will output rust code that properly evaluates to whatever final value the expression represents.

If any new attributes occur in the expression, the provided attr_fun function (see ToTokensState) should register them with the state object.