Fix table output with differing keys

Fixes two issues:

### First Issue

Find all possible column names in list of dicts

Rather than relying on the first element to tell us all the column names,
we iterate through all the list of dicts collecting the column names.  This
accounts for when new keys are defined in rows other than the first.

Fixes #199

### Second Issue

Account for some keys not being in rows

Fixes #198.