Specialize operator<<(packer, T) also for object::with_zone.

It already existed for T = object, but if trying to pass an
object::with_zone it would match the generic operator<<() instead.
That operator calls o.msgpack_pack(), which doesn't exist and
causes a compile error.

(Re-)Using the overload for object is a better way to handle this.
Add support for copying an object to an object::with_zone.

With test.
Replace C-style casts with C++-style ones
Merge branch 'object-with-zone-copy'