entry: break out time, level and message from data

Replaces #33 and fixes #44.

Please review @aybatme
I feel this could simply be a func, I don't see the need for an empty struct with a single method.