Add caching on user lookup methods: UserForId, UserForName, UserNameForSessionId

Basic caching using a dictionary for each of these methods.  The memory footprint will be small enough that I think it makes more sense to use these separate caches, rather than attempting to unify them.

Because we currently do not provide an API to update users, the users will remain cached indefinitely once fetched by the server. Will modify this in the future.