CLN: memory-mapping code
Rebased on #44761

No need for `codecs.getincrementaldecoder` as `io.TextWrapperIO` will do that (and we can use `io.TextWrapperIO` because mmap is wrapped inside `_IOWrapper`). `io.TextWrapperIO` also provides `__next__` for us :)

Probably will need some benchmarking with utf-8/non-utf8 files.
Hello @twoertwein! Thanks for updating this PR. We checked the lines you've touched for [PEP 8](https://www.python.org/dev/peps/pep-0008) issues, and found:















There are currently no PEP 8 issues detected in this Pull Request. Cheers! :beers: 

##### Comment last updated at 2021-12-05 23:25:04 UTC ~~This PR should speed up all `read_csv(..., engine="c", encoding="utf-8")` calls when a binary handle is used (this should now be faster than using text handles), by applying the same shortcut as done for `memory_map` in #43787.~~

Using TextIOWrapper seems to be slower than the previous solution :( Will revert most of the changes in this PR.