Updated Telnet code processing to handle subnegotiation parameters

Had to implement a basic state machine to get it working correctly
Improved type safety, cleaner way to build commands
Return data that was processed in subnegotiation parameters
Added some unit testing for the telnet code

Also made it so we properly handle IAC escape sequences when
processing subnegotiation data