Default to named index `name` when column named `name` not found
There is an asymmetry in Pandas wrt. indexes vs. columns that is not present in the relational model. For example, for the purposes of merging one has to decide whether the column on which to merge is an index or not, despite the fact that indexing is incidental complexity for optimization. This leads to many of us having duplicate indexes and columns with the same name, which can cause errors and wastes memory for large data frames.

A possible fix would be to address the column lookup in all the current operations that require columns or indexes so that on NameError for columns the named indexes would be fetched instead. Or one may as well go all the way relational and make _any_ `df[my_col_or_named_index]` lookup fetch a named index if the column name is not found.

The latter behaviour is being implemented in the eval/query functionality by @jreback and @cpcloud in #4164, so it would also be 'least surprise' to use this policy across the board.
