Fixed #4444 - Tidying up 'broken pipe' errors in runserver logs

I have posted about this pull request on the django-developers mailing list at https://groups.google.com/forum/#!topic/django-developers/_oC_PAxxnQI . I did this because there is a very old existing wontfix ticket ([#4444](https://code.djangoproject.com/ticket/4444)) on this topic and so am hopefully following the contribution guidelines.

Ticket #4444 was opened in May 2007, and marked wontfix in September 2007 saying "The best we could is to have a more explicit error message." - hopefully this might count as such an error message :smile:

This pull request builds upon a previous patch posted to the django-developers list and outputs "Broken pipe" instead of a traceback for such an error. I get these frequently (e.g. hit refresh before your previous page has finished loading to sometimes get it).

I hope this can be considered for inclusion, as I think it tidies up a common issue with runserver output that will especially confuse people new to Django. Do let me know if I've gone about fixing it in the wrong way, or if I should do something differently.
I agree that we should use the latest version of handle() from CPython to make sure we are as protected as we can be, even when using runserver in production. I see this as a one-time copy from the python standard library. There was one change from 2006 - 2014, so we could expect another change somewhere around 2022.

The trade-off here: avoiding confusion for Django beginners (I've got questions about this from at least three different people), vs. copying 14 lines from a relatively stable standard library method, is worth it.

So if we update the the latest CPython version of handle() I'm +1.