message perf: Streamline stream name lookups.
message perf: Streamline stream name lookups.

When we are fetching messages, we need to hydrate
stream names into the messages for legacy reasons.

(Ideally, we could skip this step for the webapp
and modern mobile clients, since they really only
need stream_ids, but we're not there yet.)

We keep a recipient cache that maps recipient ids
to stream names.

When we populate that cache, we now use `values(...)`
to avoid fat objects and extra DB work.

Note that we are already using a similar technique
for hydrating PM/huddle recipients.

brainwane/zulip,shubhamdhama/zulip,punchagan/zulip,timabbott/zulip,hackerkid/zulip,eeshangarg/zulip,kou/zulip,kou/zulip,synicalsyntax/zulip,eeshangarg/zulip,brainwane/zulip,showell/zulip,showell/zulip,andersk/zulip,shubhamdhama/zulip,hackerkid/zulip,showell/zulip,zulip/zulip,eeshangarg/zulip,rht/zulip,synicalsyntax/zulip,brainwane/zulip,hackerkid/zulip,eeshangarg/zulip,timabbott/zulip,rht/zulip,shubhamdhama/zulip,andersk/zulip,synicalsyntax/zulip,showell/zulip,showell/zulip,kou/zulip,punchagan/zulip,shubhamdhama/zulip,punchagan/zulip,brainwane/zulip,zulip/zulip,showell/zulip,punchagan/zulip,eeshangarg/zulip,punchagan/zulip,andersk/zulip,hackerkid/zulip,shubhamdhama/zulip,punchagan/zulip,kou/zulip,brainwane/zulip,synicalsyntax/zulip,timabbott/zulip,synicalsyntax/zulip,hackerkid/zulip,shubhamdhama/zulip,rht/zulip,synicalsyntax/zulip,brainwane/zulip,andersk/zulip,kou/zulip,kou/zulip,zulip/zulip,rht/zulip,zulip/zulip,shubhamdhama/zulip,rht/zulip,rht/zulip,showell/zulip,rht/zulip,hackerkid/zulip,andersk/zulip,timabbott/zulip,brainwane/zulip,punchagan/zulip,synicalsyntax/zulip,kou/zulip,timabbott/zulip,timabbott/zulip,eeshangarg/zulip,andersk/zulip,andersk/zulip,zulip/zulip,zulip/zulip,timabbott/zulip,hackerkid/zulip,zulip/zulip,eeshangarg/zulip