Add new ve.copy callback for all nodes, not just leaves

Applying the callback only to leaves makes it impossible to use the
callback to alter the representation of arrays or objects with `clone`
methods.  Invoking the callback on every node allows the user to
extend `ve.copy` to work on additional object types.

Also fixed a buglet to ensure that the leaf callback is invoked even
when the original object passed in clonable.  The `ve.copy` method
also doesn't crash now when given primitive values (including `null`
and `undefined`).

Change-Id: I9a68b28cd145c03dacb6cee3bf8c53697d8bc071