//make the startingWith into the dealer.  this saves a step for the caller to figure out who needs to be dealt to first.
 public List<PlayerIdHand> CreatePlayerHands(Deck deck, IList<int> players, int startingWith, int handSize)
 {
     var startingIndex = players.IndexOf(startingWith);
     var playersOrdered = players.Infinite().Skip(startingIndex).Take(players.Count).ToList();
     return playersOrdered.Select(p => new PlayerIdHand(p, deck.Skip(playersOrdered.IndexOf(p)).TakeEvery(players.Count).Take(handSize).ToList())).ToList();
 }