Fixed a memory leak
- The ProtocolBuffer returned by a parser is now properly discarded
Made the PiParser a normal class (instead of a singleton)

A PiParser singleton class doesn’t make sense anymore this far into the project. For group registration, the group registration parser will need to be given an instance of a client manager where groups will be registered. If the PiParser was a singleton, we would be unable to have more than one instance of the group registration parser which means having more than one client manager would be pointless. By removing the singleton, we are able to run multiple instances of the default PiServer in the same program without an issue.
Fixed the PiParser way of handling a null ProtocolBuffer
Added a clientID parameter to the parse methods.

- The clientID should not be used directly. These numbers are managed by the clientManager and can be used to add/remove a client from a group or get client data
Created GroupRegistrationParser class

- The PiServer and ClientManager were updated as needed to get the GroupRegistrationParser to work