Return proper type for GeoDataFrame.__getitem__

Introduce type testing for GeoDataFrame.
Add tests for boolean index.

GeoDataFrame.__getitem__(key) returns the Geo* equivalent class when a
'geometry' column is present.

The following are True when df is a GeoDataFrame:
type(df['geometry']) is GeoSeries
type(df['column']) is Series
type(df[['column1', 'column2', 'geometry']]) is GeoDataFrame
type(df[['column1', 'column2']]) is DataFrame