WIP: Support metadata at de/serialization time

#2485, with much reduced scope.

While collecting vbench data recently, it became painfully
obvious how useful it would be to be able to attach metadata 
tags to serialized frames/series/panel.

This is a rough draft for something I'd like to see happen in 0.12.
It creates yet another version of pickle files, so much testing
needs to be done there.

There's a plan (#686, timeline unclear) for implementing a binary serialization
format for pandas, which will need to replicate this functionality if this  makes it in.

@jreback, if you have something planned in this direction, I'm glad to
withdraw this PR, it's just a statement of intent to prod us into getting something
working during the 0.12 release cycle.

The design choices I'm going for right now:
- **no propagation** semantics through operations, the metadata tags are restored
if present, and are guranteed on load, only. 
Example use case : store measurements as dataframes with data,
location, etc'. Then, load a mess of them back up and (generally) you may 
use the metadata either as column/index labels, or just pick out a subset
based on them, sort based on them, etc'. **edit:** Document this very clearly.
- **only JSON-able** data allowed in dicts. Allowing anything else would bring
us back to the pickle problem, might create issues if #686 gets implemented
(difficulty in serializing arbitrary objects in metadata without using pickle), and is generally
an unknown quantity. JSON can cover a lot of mileage.
letting objects define their own way to be serialized for metadata purposes
is reinventing pickle, so no. (JSONable not yet enforced in the code).
- TODO: consider the binary blob case.
- TODO: if there's no propogation, should the data live on the object at all? ( what about `o, meta = pd.load()`?)
- reserved keywords/namespace for pandas' use?
- establish naming convention (for reserved kwds or more broadly?)
- make it minimal, no setdefault(), save/load -time hooks etc, users should roll their own there.
- currently, it's just a dict `.meta` that gets pickled and unpickled with the object.
- versioning/schema to be baked in as reserved keywords? the pickle
code taught me that much.
- The usual "I want tab completion/attr access/call it _foo" discussion to follow.


```python
In [8]: df=mkdf(10,5)
   ...: df.meta['Im']="persistent"
   ...: df.save('/tmp/1.pickle')
   ...: dfrt =pd.load('/tmp/1.pickle')
   ...: 

In [9]: dfrt.meta
Out[9]: {'Im': 'persistent'}
```