code: function () {
  		if ( server || ( !client.ie || client.version > 8 ) ) {
  			return function ( obj, key ) {
  				key = ( key === true );
  				var o = [];
  
  				if ( !isNaN( obj.length ) ) {
  					o = slice.call( obj );
  				}
  				else if ( key ) {
  					o = array.keys( obj );
  				}
  				else {
  					utility.iterate( obj, function ( i ) {
  						o.push( i );
  					});
  				}
  
  				return o;
  			};
  		}
  		else {
  			return function ( obj, key ) {
  				key   = ( key === true );
  				var o = [];
  
  				if ( !isNaN( obj.length ) ) {
  					try {
  						o = slice.call( obj );
  					}
  					catch ( e ) {
  						utility.iterate( obj, function ( i, idx ) {
  							if ( idx !== "length" ) {
  								o.push( i );
  							}
  						});
  					}
  				}
  				else if ( key ) {
  					o = array.keys( obj );
  				}
  				else {
  					utility.iterate( obj, function ( i ) {
  						o.push( i );
  					});
  				}
  
  				return o;
  			};
  		}
  	}
docs: Returns an Object ( NodeList, etc. ) as an Array
  
  @method cast
  @param  {Object}  obj Object to cast
  @param  {Boolean} key [Optional] Returns key or value, only applies to Objects without a length property
  @return {Array}       Object as an Array