Subclasses of Exception have strange deserialization

We pass these back from subprocs so they need to ser/de correctly, but Exception has special
deserialization. UnreadableArtifact is basically just a sentinel value so subclassing Exception
just adds complexity.

Testing Done:
https://travis-ci.org/pantsbuild/pants/builds/41981675

Bugs closed: 826

Reviewed at https://rbcommons.com/s/twitter/r/1395/
Sync of https://github.com/pantsbuild/pants/commit/8541f2c78a7aaf129638229c2d37e30ca25549da