YArray = function(o, startIdx, arraylike) {
    var t = (arraylike) ? 2 : YArray.test(o),
        l, a, start = startIdx || 0;

    if (t) {
        // IE errors when trying to slice HTMLElement collections
        try {
            return Native.slice.call(o, start);
        } catch (e) {
            a = [];
            l = o.length;
            for (; start < l; start++) {
                a.push(o[start]);
            }
            return a;
        }
    } else {
        return [o];
    }
}
Y.Array(o) returns an array:
- Arrays are return unmodified unless the start position is specified.
- "Array-like" collections (@see Array.test) are converted to arrays
- For everything else, a new array is created with the input as the sole
  item.
- The start position is used if the input is or is like an array to return
  a subset of the collection.

  @todo this will not automatically convert elements that are also
  collections such as forms and selects.  Passing true as the third
  param will force a conversion.

@method ()
@static
  @param {object} o the item to arrayify.
  @param {int} startIdx if an array or array-like, this is the start index.
  @param {boolean} arraylike if true, it forces the array-like fork.  This
  can be used to avoid multiple Array.test calls.
  @return {Array} the resulting array.