AbstractRoster.get_member() returns too many memberships

Reported via direct email from Darrell Kresge.

In the “preferred address” query, I think there needs to be an additional constraint of (“User._preferred_address_id = address.id”) — otherwise, you get one row for every subscriber.

I've confirmed this by unittest. If you subscribe say 4 users with their preferred address, and then search the mailing list's members roster for one of the addresses, you get an AssertionError because all 4 memberships are returned by the _get_all_memberships() query.

This is a serious bug that needs fixing in both trunk and 3.0.