ENH: dataframe memory usage

Closes [#6852](https://github.com/pydata/pandas/issues/6852)

For a sample DataFrame:

```python
df = pd.DataFrame({ 'float' : np.random.randn(10000000), 'int' : np.random.randint(0,5,size=10000000), 'date' : Timestamp('20130101'), 'string' : 'foo', 'smallint' : np.random.randint(0,5,size=10000000).astype('int16') })
```
The memory usage of the elements of each column (in units of bytes) are returned by accessing the `meminfo` method. This returns a Series:

```python
>>> df.meminfo()
date        80000000
float       80000000
int         80000000
smallint    20000000
string      80000000
dtype: int64
```

Also, the total memory usage (in a human readable format) can be found via the `info(memory_usage=True)` method:

```python
>>> df.info(memory_usage=True)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 10000000 entries, 0 to 9999999
Data columns (total 5 columns):
date        datetime64[ns]
float       float64
int         int64
smallint    int16
string      object
dtypes: datetime64[ns](1), float64(1), int16(1), int64(1), object(1)
memory usage: 324.2 MB
```


@jreback Using column indices and iloc seems to be fine. It looks there's issues with the displaying DataFrame info via `info()` method with duplicate columns.

```
In [8]: df.info(memory_usage=False)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 100 entries, 0 to 99
Data columns (total 4 columns):
int64      100 non-null int64    int64
int64    int64
int64    int64
dtype: object
int64      100 non-null int64    int64
int64    int64
int64    int64
dtype: object
int64      100 non-null int64    int64
int64    int64
int64    int64
dtype: object
float64    100 non-null float64
dtypes: float64(1), int64(3)
```

For a dataframe with 3 columns all named `int64`.