Stop ShadowAsyncTask swallowing exceptions in `onPostExecute`

This provides a fix for #686. `onPostExecute` could be run synchronously from `FutureTask#run` when the task was executed and if the UI thread scheduler was not paused it would mean that `run`'s exception swallowing would affect `onPostExecute`.

We swapped `ShadowAsyncTask`'s use of `FutureTask` for a very basic implementation that will allow exceptions to   bubble up rather than ignoring them while still maintaining the same behavior for the task itself.