Client Code - Multi Threading

The code is modified to record the list of all active commands. These
commands are kept in a list whose entries are used to update the status
of their corresponding threads.
Issues:
1. shiftl and shiftr do not have any counter-command signal (e.g.,
-shiftr). As a result, their threads would run indefinitely once they
are received once.
2. Opposing commands (e.g., pressing forward/backward or right/left
together) should be handled.