function __clone(item) {
    var result, i, k, l;

    if (!item)
      return item;

    if (Array.isArray(item)) {
      result = [];
      for (i = 0, l = item.length; i < l; i++)
        result.push(__clone(item[i]));
    } else if (typeof item === 'object') {
      result = {};
      for (i in item)
        result[i] = __clone(item[i]);
    } else
      result = item;

    return result;
  }
This function simply clones an object. This object must contain only
objects, arrays and immutable values. Since it is not public, it does not
deal with cyclic references, DOM elements and instantiated objects - so
use it carefully.

@param  {Object} The object to clone.
@return {Object} The clone.