Fix unwinding when the data ptr itself be modified.

The issue arises because the unwind facility was copying the data itself
rather than taking a reference to the data. This results in the unwind
function not seeing any modifications to the original data. If the data is a
pointer, and something moves that pointer (e.g. realloc), then the unwind
function won't see the new address.

The fix is to take a reference to the data and store that instead.

I've also expanded the documentation for the ec_with method to remind the users
to be careful with side-effectful statements. A consequence of the change
above is that ec_with(&d, u) will fail to compile (instead of silently not
doing what you think it should).