Abstract out log and log entry classes

This is prep work to implement persistent log implementations.