Avoid unnecessary SQL queries in UserList

All needed information were already available, but weren't used. Instead UserName() was called that calls GetUserData() that calls other methods and so on. That led to many unnecessary SQL queries which can be quite slow with large user lists.

I also added some tests to ensure that the new methods work.