Boris Johnson wins no-confidence vote despite unexpectedly large rebellion