Core (mpdSend): factor out the decision to re-connect and retry

This makes it easier to add retryable exceptions, but does
not alter the current behaviour.

The reason for not retrying on all ConnectionErrors is the
possibility of an infinite loop.
A real solution would constrain the time spent retrying or
the number of retries rather than the set of exceptional
states that trigger a retry.