Consolidate bucket list traversal

I'm not sure if actually prefer this structuring of the code. One the
one hand, it makes each of the Add/Remove/TryGetValue methods very clear
about their logic (abstracting away the bucket list traversal). On the
other, it seems to obscure the data structure a little bit; in each of
the Add/Remove/TryGetValue methods, the traversal was straightforward
and easy to read. Hiding that logic in the FindEntryForKey method kind
of obscures it.