public <T> T clone(T object) {
        return clone(object, true);
    }
Deeps clones the specified object, reusing previous clones when possible.

 <p>Object cloning priority works as follows:</p>
 <ul>
 <li>If the object has already been cloned then its clone is returned.
 <li>If there is a custom CloneFunction then it is called to clone the object.
 <li>If the object implements Cloneable then its clone() method is called, arrays are
     deep cloned with entries passing through clone().
 <li>If the object implements JmeCloneable then its cloneFields() method is called on the
     clone.
 <li>Else an IllegalArgumentException is thrown.
 </ul>

 Note: objects returned by this method may not have yet had their cloneField()
 method called.

@param <T> the type of object to be cloned
@param object the object to be cloned (may be null)
@return a new instance, or a cached value, or null
jme3-core/src/main/java/com/jme3/util/clone/Cloner.java