Widget trait serialization

Here's a rough draft of a pull request to enable custom serialization for traits on widgets.  I also added a default klass attribute to the Instance traitlet, so you could subclass Instance to easily get a new traitlet for a certain class.  Here is an example where this is useful:
```python
def np_to_list(a):
    if a is not None:
        return a.tolist()
def np_from_list(a):
    if a is not None:
        return np.array(a)

class NDArray(Instance):
    klass = np.ndarray
    metadata = {'serialize': np_to_list,
                'deserialize': np_from_list}
```
Then the NDArray traitlet will by default have the klass and some custom metadata.


TODO:
- [x] Change "unserialize" to "deserialize".  It seems that everyone but PHP talks about deserialization rather than unserialization.
- [x] possibly change from/to_json to serialize/deserialize.  This leaves the door open to having binary buffers also transferred when the changes Min made last week regarding binary buffers in Comm messages percolate upwards to widgets.
See comment from above about the serialize function.