Added Logger Features

Loggers not form a simple hierarchy. There are two root logger types (a
binary and "simple", or csv, logger) which can be inherited from. I
haven't tested the "load" functions, only the save.

The main issue surrounding logging now has to do with "replay". In order
for replay to make sense, we need to have the list of objects be static.
Right now there is no label on which object is in which position (or
what the objects are). In order to do recall, we need either an indexed
list of these objects (meaning nothing in the environment can change if
we reload), or some sort of unique identifier to be searched for for
each object. The properties can then be reloaded frame-by-frame. The
other issue with this is that the frame rate may be different on
different machines. We will get a true replay, but the requirement will
be that the load functions are called on Update by the replayer. This
means if a really high frame rate computer is used for the logging but a
low framerate computer is used for replay, the low framerate computer
will watch the replay in slow motion. Similarly, if the reverse were
true, the replay computer would appear to replay too fast. If we can fix
the replay interval (or remap everything to a FixedUpdate) we can likely
correct this, but we have to decide if we want to recreate what the user
saw or what happened and what parameters to fix.