Revert "Use Untraceable<T> to hold LayoutDataRef instead of manual Encodable implementation."

This reverts commit 9d642695608ac2a1a1d8392d303cf20cdcb539e8.
Reintroduce Untraceable<T>.deref_mut() to make mem::replace() possible to Untracebale<T> field.

Some compile errors caused by the compiler's misreading comes back again :(
We re-use `deref()`explicitly to hide these errors.
Use Untraceable<T> to hold LayoutDataRef instead of manual Encodable implementation.