fix: add __contains__ to dict_protocol_catcher to avoid breaking on "in"

Before this commit, doing:

    stuff = dict_protocol_catcher(entity)
    not_in_entity in stuff

Would break because since __contains__ doesn't exist, __getitem__ is called
instead and fails with a KeyError.
8 jobs for branch/default in 168 minutes and 1 second (queued for 4 minutes and 6 seconds)
Status Job ID Name Coverage
  Lint
passed lint_doc #31143
triggered

00:07:10

passed lint_doc8 #31142
triggered

00:02:26

passed lint_manifest #31141
triggered

00:02:19

passed lint_py #31140
triggered

00:02:21

 
  Tests
failed py3-from-forge #31147
triggered allowed to fail

00:28:41

failed py3_misc #31146
triggered

01:24:43

passed py3_server #31144
triggered

02:13:07

passed py3_web #31145
triggered

00:39:26

 
Name Stage Failure
failed
py3-from-forge Tests
No job log
failed
py3_misc Tests
No job log