Added support for predicate error filters.

Bluebird now supports predicate error filters. The format is:

    promise.catch(predicateFilter, function(e) { });

where predicateFilter is `function(error) => bool`

Predicate filters should allow for extremely fine-grained control of caught
errors: pattern matching, error-type sets with set operations and other
advanced techniques can be easily implemented on top of them.