Rework the send method and implement attachments and icons

Rather than bogging down the send() function, we now have nice chainable methods for setting the username, channel and icon. The send function is now used to send the composed message along with the text for the message.

Also implemented some unit testing.