Refactor of clusteredheatmap

Here you go! Thanks for being patient with my awful code from before. This is a complete refactoring, so the dendrograms and linkage matrices are getting calculated separately, and `DendrogramGrid` is completely naive to all calculations.

So far this just has basic functionality, I removed some concepts for simplicity:

* `data_na_ok` or masked data, allowing for NAs.
* `{row,col}_labelsize`: fontsize of the row and column labels
* `fig` : user-provided fig. user can provide just `figsize`
* `title`, `title_fontsize`: user can do this on their own using the `DendrogramGrid` instance
* Multiple levels of color labels for rows and columns

If anyone is willing and able to figure out how to make these work elegantly, please do! I couldn't figure it out.

Other things of note:
* Added the feature of user-specified `{x,y}ticklabels` to `heatmap` and `_HeatMapper`.
* Moved all `{col,row}_kws` into explicit keyword arguments, e.g. `{col,row}_linkage` because I felt they were too hidden, and it's not like there's another function you can refer to, to see the possible inputs (like you can with `joint_kws` in `jointgrid`)
* Naming is fluid. I just came up with names that made sense on the spot, and am open to more explicit or understandable naming.
* I haven't completely tested all the combinations yet (!!) so any help here is very much appreciated

Todos (copied from https://github.com/mwaskom/seaborn/pull/325):

- [ ] Tests
- [ ] Tutorial documentation
- [ ] Gallery example(s)
- [ ] Release notes
In some cases, the user may want to use column or row names that are different from their dataframe, e.g. the new names may be duplicated in the original, and `pandas` doesn't allow you to reindex a duplicate axis. This is relevant because when you reorder the data after clustering it, you get an error if your index is duplicated.