Handle 416 status code by deleting the local file and retrying

A server returns 416 if the range we've provided to it is invalid. Whilst the local partially downloaded file exists, any attempt to retry using the same range is guaranteed to fail (unless the file is replaced on the server).

The only way to resolve the issue is to send a valid range header (unknown at this point) or not send one at all.

This patch, in response to a 416 status code, seamlessly deletes the local partially downloaded file and retries the file download. Because the local file has been deleted the retry attempt will not include a range header and hence 416 won't be returned again i.e. no infinite retrying.

If for some odd reason the local file can't be deleted then we gracefully fallback to the previous behaviour of calling the error callback with the 416 status code error.
Here I would do this instead:

```objective-c
        NSError *fileError;
        if ([[NSFileManager defaultManager] removeItemAtPath:self.pathToFile error:&fileError]) {
            [self start];
            return;
        }
        else {
            TCLog(@"An error occured while removing file - %@", fileError);
        }
```

since `removeItemAtPath:error:` returns a `BOOL`.

Did you try this? How does the `NSOperation` behavies when calling `start` from an already running one? I think the right pattern would be to stop this `NSOperation`, and start a new one.

You should also report the error to the delegate or the error block (see `notifyFromError:`) ;)