Replace String[] with ArrayList<String> in MessageStore

The original change was made to save memory by replacing
LinkedList<String> by String[]. However, when subsequently we needed to
retrieve lines from the Message, we needed to copy the array into a
list, effectively occupying more memory than we needed for the original
list.

This new implementation will only keep one unmodifiable list of all the
lines and always return reference to it. Therefore reducing the memory
consumption of Message (and its use) to the least possible value.