Modify Group requests and join storage to use strings

Joinable and requestable groups had significantly longer execution
times for Group.evaluate prior to this change, as we were
dereferencing the entire join_members and request_members lists from
the database when all we needed to do was check if the user was in it.
We switch to storing only the character names, which are guaranteed to
be unique, and which doesn't require expensive dereferencing while
still meeting all of our intended use cases (being able to easily check
if a character is in the list).

Signed-off-by: Tyler O'Meara <Tyler@TylerOMeara.com>