Add CancelDownload method to provider interface

Instead of just calling Thread.Abort which is messy and doesn't let
providers clean up (for instance podcasts continue to download on a
separate thread), add a CancelDownload method to the IRadioProvider
interface which is called when a download is cancelled.

If the provider doesn't return from the main provider thread within 10
seconds, fall back to using Thread.Abort and set the download to Errored
so that the hung / blocked stack trace can be reported.

This resolves #154.