issue: https://linear.app/comm/issue/ENG-4889/memoize-action-for-every-keyservercall
Fistly, `boundCallServerEndpointSelector` is added to memoize the valuse retuned from `bindCookieAndUtilsIntoCallServerEndpoint` based on its arguments. `bindCookieAndUtilsIntoCallServerEndpoint` creates some functions, so it might be beneficial to memoize them. It is also called when the action is being executed - only once the client decides which keyserver they want to call with this action, we can bind the correct cookie and other values to a `callServerEndpoint`. And we want actions to be as fast as possible.
Secondly, `baseCreateBoundKeyserverCallActionSelector`/`createBoundKeyserverCallActionSelector` is added. This is similar to `baseCreateBoundServerCallsSelector` that was used in `useServerCall`. `_memoize` keeps a map of results, keyed by the first argument of the function it memoizes. So what we are doing is creating a selector for each keyserverCall. Every one of those selectors remembers the last value calculated for its action. So that when we call `useKeyserverCall` on KeyserverCall A, then on KeyserverCall B, then again on A (and `dispatch`, `currentUserInfo` and `keyserverInfos` have not changed during this time), the value returned for A is the same in both cases. Even though `useMemo` in `useKeyserverCall` changed its return value twice. This allows for actions to only change when the things they are dependant on change. Without this, the actions would be constantly changing, just because some other actions are being called in a different part of the codebase.