added MessageGroup.containsMessages()
MessageCatchingExecutor does not report MessageGroup that does not contain any messages
refactored TaskExecutor
TaskExecutor uses task hashes as names for directory with results
changed formatting of Messages printed by UserConsole, all are indented by two spaces