Added the public long getGroupID(); to the Message Interface, this
allows me to use the groupID of Message interface throughout the
application without casting it to a StringMessage.
Made major changes and introduced a MessageFactory and the corresponding
ConcreteMessageFactory instead of static builder methods in the class
StringMessage.

To accomodate the change. the rest of the program had to be refactored. 

All tests pass after refactoring.
Added Unit tests for the ConcreteMessageFactory, in extension is also
tests the Interface MessageFactory.