WIP/ENH: allow categoricals in msgpack
closes part of #7621

WIP, but wanted to put it up as is, since it probably interacts with  #12129
cc: @kawochen 

this is how I modified the schema - open to suggestions

``` python
# normal block
 {'dtype': dtype,
  'data': ExtType(0, <bytes>)}
# Categorical block
 {'dtype': 'categorical',
  'data': {
      'codes': {'dtype': 'int8', 'data': ExtType(0, <bytes>),
      'categories': {'dtype': dtype, 'data': ExtType(0, <bytes>)}
}
```

I have cherry picked this onto 0.18.0rc1, fixed the conflict and it worksforme™.

Can I submit a PR with it?
 iirc last time this was looked at we were going for a slightly more general soln for extension types
I believe @kawochen made the changes in master to make this accessible

@chris-b1 
@kawochen 
 It would be awesome if there was any chance of getting this into 0.18.0.
 no but 0.18.1 won't be far away
 @pwaller - feel free to submit a PR on my branch or just open up a new one if it's simpler.   

Looking at #12129, the Series constructor logic can be probably cleaned up, but I think the overall approach still needs to something like what I did here - extending the schema to store both categories and codes.
 Submitted at https://github.com/pydata/pandas/pull/12573
 closing in favor of #12573 
