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.
Merge pull request #3418 from saneyuki/untrace

Replace manual Encodable implementation for LayoutDataRef with Untraceable