Add libc::errno and libc::set_errno and use to implement std::os::errno

This pull request does the following:

  - adds two functions `libc::errno() -> c_int` and `libc::set_errno(c_int)`
  - implements `std::os::errno` using `libc::errno`
  - removes the currently disparate signatures for `std::os::errno()`, which returns `int` on unix and `uint` on windows, in favour of returning `int` only.

This represents a reopening of previously discussed PR #17265.


The question of whether `use <...>::{c_int}` is not beautiful is probably a debatable one :-).  In either case, the style has been chosen as it matches all of the other single name `use ...` statements within this source file.

As to defining `errno_ptr()` over `_errno_ptr()`.  I guess the benefits are that it ensures `errno_ptr` is implemented on all `target_os` possibilities.  If a value of `target_os` is not covered by the `_errno_ptr` implementations, the function `errno_ptr` won't compile, providing a hint that it needs to be implemented for that new platform.  (granted, if it wasn't done this way, `errno` and `set_errno` wouldn't compile, but that is a slightly less specific error)

It also means the function only needs to be documented at this single entrypoint.

But again, the implementation was mostly influenced by what the existing `errno` source had been doing.