Use CHANMODES when modifying channel modes

This commit enhances how channel modes are set, and should be free of any TypeError errors. It also creates a new Function Channels since that's the most efficient way of creating multiple Objects with the same properties, and adds a method to set that channel's mode, emitting events as necessary if there is an associated message to emit with.