I'm going to be quick, ask questions or for further explanation if you would like that and I'll respond within a couple of hours. I have a really big head-ache and am quite tired right now.
I'm designing it to be a networked game from the beginning on. The problem I currently have is the question: Where does the User input information belong?
You don't need to design your game\engine with networking in mind. When I was developing JevaEngine, there was no consideration for networking. The networking isn't apart of the engine or rpg game at all. It really shouldn't be either because it obscures the purpose and function of the class with a bunch of networking and syncing code.
What you should do is design your entities so that they allow for Observers, using the Observer Pattern.
If you implement the observer pattern for your entities, you can observe them through another module (i.e, the server) and notify users of your observations. The users will then mutate their local entities to sync up with the server.
When client 1 presses a key, it sends it to the server. Should the server send it to the other client?
That is almost the right idea, the problem with doing it at such a level you describe (syncing input) is it is incredibly difficult to maintain synchronization through that method and it works on a much too abstract level for the server to optimally distribute accross clients.
Intead, while observing your entities you catch observations you want to be synchronized (i.e, pressing somewhere to move to some point B) The entity will begin moving to B and the server can broadcast taht observation to clients.
Here is how moving works in JevaEngine:
The client character class attempts to travel to point B. The client will dispatch a message telling the server that it would like to move to point B. The server responds by moving it's corresponding player entity to point B (notice at this point the client's player entity hasn't actually moved yet.) The server will then notify the client of the mutations performed on the server-side entities and where it is moving. I.e, the client should never mutate an entity's state unless it is told to by the server.
Sorry I am brief I have a killer head ache right now.