Avoid shadowing instance methods from arrays

Ignore instance properties on Arrays that are shared with the Cheerio
constructor (excepting `length`).
Coerce JSON values returned by `data`

From the jQuery API documentation on `$.fn.data` [1]:

> Every attempt is made to convert the string to a JavaScript value
> (this includes booleans, numbers, objects, arrays, and null). A value
> is only converted to a number if doing so doesn't change the value's
> representation. For example, "1E02" and "100.000" are equivalent as
> numbers (numeric value 100) but converting them would alter their
> representation so they are left as strings. The string value "100" is
> converted to the number 100.

[1] http://api.jquery.com/data/
Release 0.12.4
Merge pull request #294 from jugglinmike/extended-arrays

Avoid shadowing instance methods from arrays
Simplify `make` method

Organize all logic for creating Cheerio objects within the Cheerio
constructor itself. Ensure that the `Function` prototype exists in the
constructor's prototype chain so that it defines a `call` method.
Re-define `Cheerio#make` as a simple proxy for the Cheerio constructor
for those methods that need to create new Cheerio instances (thus
avoiding compile-time cyclic dependencies).
Merge pull request #309 from jugglinmike/simplify-make

Simplify `make` method
fixed traversing tests
Merge pull request #310 from finspin/fixTests

fixed traversing tests
Correct inconsistency in `$.fn.map`

Update Cheerio's `map` method to more closely match jQuery's
implementation.

1. Invoke the specified callback in the context of the element
2. Wrap the returned elements in a Cheerio object
3. Remove `null` and `undefined` when returned by the interator
4. Perform a shallow merge on arrays returned by the iterator

Update the documentation and unit tests to reflect this change.
Update HtmlParser2 version

The latest version of HtmlParser2 has deprecated the `ignoreWhitespace`
option in favor of a new option, `normalizeWhitespace`.

Allow for future patch releases of HtmlParser2 to automatically
"upstream" into Cheerio.
Introduce rudimentary benchmark suite

Compare the performance of Cheerio at HEAD with jsdom [1] using jQuery.
Include a new GNU Make target: `bench`.

[1] https://github.com/tmpvar/jsdom
Merge pull request #314 from jugglinmike/bench

Introduce rudimentary benchmark suite
Merge pull request #313 from jugglinmike/bump-htmlparser2

Update HtmlParser2 version
Ignore colons inside of url(.*) when parsing css

Parsing by css is totally wrong, but this will at least not break on `url(http://whatever);` anymore! Closes issue #315.
Enforce project quotation mark style

As documented in this project's `CONTRIBUTING.md` file, string literals
should be defined using single quotes. Add this setting to the JSHint
configuration file, and correct occurrences of double quotes.
Implement `$.fn.end`

From the jQuery API documentation[1]:

> **Description**: End the most recent filtering operation in the
> current chain and return the set of matched elements to its previous
> state.
>
> Most of jQuery's DOM traversal methods operate on a jQuery object
> instance and produce a new one, matching a different set of DOM
> elements. When this happens, it is as if the new set of elements is
> pushed onto a stack that is maintained inside the object. Each
> successive filtering method pushes a new element set onto the stack.
> If we need an older element set, we can use end() to pop the sets back
> off of the stack.

[1] http://api.jquery.com/end/
Simplify internal function

By returning an Array of DOM nodes, `traverseParents` can operate
faster, and `Cheerio#closest` can be made more efficient by not
needless wrapping intermediate results in Cheerio objects.
Correct bug in `Cheerio#parents`

Ensure that:

- The parents of *every* element in the selection are returned
- The descendent groups are added to the returned set in reverse order
  of the original elements
- The result set contains no duplicates
Merge pull request #318 from jugglinmike/fix-parents

Fix parents
Run CI against Node v0.11 as an allowed failure

Building against the latest unstable release of Node.js should help the
project stay on top of any bugs or breaking changes to the platform.
Specifying that build as an allowed failure guarantees that unforeseen
errors do not block ongoing work.