Reintegrate data encoding functions into the Observer class.

The datapoint is encoded according to the format specified when an Observer is created.

Improve the way field names and field indexes are handled and make field_names a gettable property.

Data fields/values are now stored in OrderedDict so that we don't have to wonder about order when
doing CSV formatting.