types: fix uintptr_t definition by reworking

There is a copy and paste issue in the definition of the scan and
print defines for uintptr_t on 64-bit Windows. SCN_PTR and PRI_PTR
are defined there although SCNxPTR and PRIxPTR have to be defined.
There is also code duplication which explains why this could happen.

So only define the uintptr_t type when it's missing and check
afterwards if any limits, scan or print defines are missing for it.