John McDonnell repeatedly refuses to apologise for calling Tory MP a 'stain on humanity'