I think that any fallback functionality should be explicitly opt-in to avoid situations where program's behavior changes unexpectedly based on whether `msgpack` is installed.  I'm imagining two modes:

- Use MsgPack and fail loudly if it's not installed.
- Use toString() converters, _even if MsgPack is installed_.

This will also avoid problems caused by only a subset of workers having a particular library installed (for example, there's currently a [crash in sample()](https://spark-project.atlassian.net/browse/SPARK-927) if numpy is installed on the master but not on some of the workers, which is caused by how we handle automatic fallback).