Avoid memory corruption when moving UDP queues

Passing overlapping ranges to memcpy leads to undefined behavior.  Some
versions of glibc copy backwards, causing incorrect results when the
ranges overlap.  Switch to std::move to guarantee a copy forward and to
ensure proper handling of any future class members.

See https://lwn.net/Articles/414467/
Unpack UDP_mdata_store