1. PlayerComponent - Handles updating inventory and hud information. There is only one of these and it is referenced by each character.
2. PlayerCharacterComponent - Handles updating the character game objects (movement, physics, etc). There is one of these per character.
When separating the code I tried to ask myself, "is this bit of code related to something the *player* does or experiences, or is it related to something the *character* does or experuences?" The answer to that is how I decided which class to put the code in.
As an example, I decided that no matter which character collects the coins they will add to the total, so the characters share an InventoryComponent and the HUD code for that is controlled by PlayerComponent. If I wanted to make a game where each character had its own inventory I would give each character an InventoryComponent and the PlayerCharacterComponent would control updating the HUD to show the info for the respective character.
I also forgot to mention that I changed the "player" object in GameObjectManager to be a collection of GameObjects. When one character dies, the next one is fetched from the collection and made "active"