Merge Client and Channel
Fix TriggerOnUserNameCHange returns the current value instead of the original one
Add a new property called FullName to Channel
Remove unused Message class
Add ReadOnlyDictionary class

This class will be used instead of creating new dictionaries every time
a property with a collection is accessed
Fix Send events are not fired
Make UserFactory and ChannelFactory instanced

Client class now contains refrences to both Factories
SendMessages now receive a Client object while sending
All messages now use the new Factory instances
GetChannel and GetUser functions now require a Client object
Replace List and Dictionary in User.Channels and User.Ranks with ReadOnlyDictionary
Don't create objects in Factory when joining channels
Do not send WHO message twice on join

Two who messages were sent on each join (one from NamesMessage, one from
JoinMessage
Add PrivateMessage support, Move Version message events to Client
Fix Username is not parsed correctly
Change the order of SendMessage arguments to match the format of ReceiveMessage
Add UserNoticeMessage, Rename NoticeMessage => ChannelNoticeMessage
Use a using statement for disposing the MemoryStream
Add ParsedMessage class
Make some methods in ParsedMessage static, added parameterless CTCP functions

Change coding style of ParsedMessage to match with the rest of project
Fix ParsedMessage has an empty parameter if no parameter is specified
Use ParsedMessage instead of string in receive messages

PongMessage now uses a colon before its first parameter
Add RegisteredMessage class to reduce the use of reflection, ...

Move ParsedMessage to Messages namespace