Feature/slightly smarter aliases

Two changes--one is that if you have a "foreign" key that actually points to the same table, this detects that and gives it an alias for the select that will not conflict with the original table name.

The other change is that the join on the foreign key tables is a left join.  Unless we do that, you won't see any rows in the list view where the foreign key value is not defined, so you wouldn't be able to work with rows that have a foreign key where the relationship is optional.