in addition to clone functions for converters, collators, and formatting
objects, we also need them for break iterators and all other
major/important/interesting-to-clone classes and objects.
goal: a clone function makes a copy of an object such that the original and the
copy can be used concurrently in different threads. often, this clone does not
need to be very deep because a lot of read-only data is shared and safe.