WIP: More work on player sync groups. Bugs remain (see XXX comments).

- Use the syncmaster / syncslaves attributes of Players, instead of the
  syncgroups command. This keeps all the information tied to the Players
  instead of having to fetch additional data from the server.

- Change PlayerListAdapter::updatePlayers() to use this information to
  construct the groups for the expandable list.

- Make the list of players in the expandable list stable by using their
  MAC address ID, converted to a long, as the child ID. Introduce a utility
  method to do the conversion, with a test.

- Add a specific view for the group header of players, with a minimum
  height.

- Instead of the service keeping track of a single PlayerState for the
  active player, make PlayerState a member of each Player

- Track the player's syncmaster and syncslaves in the PlayerState.

- Adjust all the PlayerState::set*() methods to return a boolean indicating
  whether or not the value was changed. Use this in the service to determine
  wether to call each specific callback.

- Track all the seen players in a Map in ConnectionState. Add methods to
  modify the map as appropriate.

- Delete the IServicePlayersCallback::onSyncGroupsChanged() method, and
  the ISqueezeService::syncgroups() method.