Fix block weirdness

This fixes an issue where a block node was modified by a template processor, then the modified node was used instead of the new value returned by the processor. Since the modified node was missing its node type, this caused Brakeman to crash and burn.

These changes also fix an issue where `if` expressions with `rlist`s for branches (instead of `block`s) were losing their values when being assigned.