ENH : add check that column names are unique
ENH : added ability to add columns to live DM
TST : added more tests of exception handling
MNT : change variable names

don't shadow `time` for no good reason
Merge pull request #47 from tacaswell/add_column

ENH : Add columns to live data frames
ENH : add property to return the number of columns
Merge pull request #48 from tacaswell/add_ncols

ENH : add property to return the number of columns
ENH : add prototype of extendable pims object

This should not stay here long term, should move upstream to
PIMS, just here for rapid prototyping
MNT : rename internal function

_lookup_non_scalar -> _listify_output
MNT : removed unused imports
MNT : simplified get_row internals

 - now using _listify_output instead of duplicating logic
MNT : more re-factoring of guts of DM

All logic for filling auxiliary data structures now lives in add_column
alone.

Logic for setting up empty data structures lives in both `__init__` and
`recreate_columns` mostly for documentation reasons (and to preserve the
ability to make this class slotted).
MNT : refactored get_column to use _listify_output
BUG : make a copy of data_dict in append_data

The input dict is mutated, make a shallow copy to avoid
side effects.
TST : added test of creating empty DM
MNT : renamed internal function

_drop_frames -> _drop_data
MNT: Major update to replay

- Replay works with conda-reciple
- Replay works with metadataStore
MNT: Cleaned up imports in run.py

MNT: Cleaned up imports (yes, again)

MNT: Reorg'd the imports (yes, a third time

MNT: Removed relative import from run.py
MNT: Removed FloatField flag that doesn't exist in enaml/master

MNT: Removed FloatField flag that doesn't exist in enaml/master
MNT: Added checks for a 'time' field

- First checks for 'time' at the event level
- Then checks for 'time' at the event['data'] level
- Finally grabs the seq_no from event if neither of the first two
  options are available

MNT: More robust try/except block for finding time in data