Add a with_code response predicate

What this PR introduces is:

- a standard signature for response predicates (by virtue of introducing the first one)
- a response predicate that checks response codes (so it can eventually replace the `pure_http` stuff that currently checks codes, speciflcally `check_status`)

This ticks the first box of #824.


`with_code` to me sounds good if there is continuation: `with_code(200).do_xyx()`. `has_code` sounds more like a predicate IMHO. So yeah, will be nice to keep `has_code`. Thanks :)