Easy Typeahead support for JSON objects

I think numerous people have run into the issue of trying to use JSON objects with Typeahead. It can be done by overriding the appropriate methods, but it also requires overriding hidden-by-encapsulation methods (`select` and `render`).

Just fixing that alone has been covered in numerous other pull requests by changing `attr('data-value', item)` to `data('value', item)` and the appropriate access, but the spin that I have added also enables simple overriding of methods that are commonly necessary for adding fancier functionality, as well as exposing some logic that can be used to override less code.  This gives flexibility to retain as much functionality as possible while still giving the power to change everything.

A working example:

http://jsfiddle.net/Mtxkn/7/

I have also added an extra layer to the sorting that simplifies support for Ajax-driven searches that may return results that do not match the actual query (e.g., typo correction). The expectation is that `matcher` would be overridden to return everything in such scenarios:

```javascript
matcher: function() { return true; }
```

This tells the processor that everything should be retained, which forces the sorter to differentiate between truly case insensitive data and the remainder. By default, nothing changes from current functionality because the `sortInsensitive` assumes the behavior should stay the same as Bootstrap behaves today.

By exposing each search query, as well as the parameters allowing the parameters being passed to them being overridden, the sorting method can be piece-wise overridden to limit work and simplify development when dealing with objects (e.g., the non-`item` parameters can be an array or themselves an object).