ENH: Make ExcelWriter more easily pluggable
Basically, make a clear interface for `ExcelWriter` and allow others to plug into it. Unfortunately, it looks like we're stuck with using `ExcelWriter` directly as a class, so might take a bit more complexity to stick this in (i.e., a metaclass).  If we can convert it to a function instead, can make a lot less magic.  Check out [this branch](https://github.com/jtratner/pandas/compare/refactor-excel-writer) if you want to see what I'm talking about.

We'd end up with a separate config option for each extension (`io.excel.xlsx.writer`, `io.excel.xls.writer`, `io.excel.xlsm.writer`)  (can't do the reverse because `io.excel.writer.xls` would match all the different filetypes).

Client code then just has to implement `save` and `write_cells` and define `supported_extensions` and register their their class with `register_engine` in pandas/io/excel, then it's easily available under `to_excel` as an engine parameter.
