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.