CXX-83 Handle Windows pernicious NOMINMAX more gracefully

The goals here are:

- All of our translation units are compiled with NOMINMAX defined
- When included by way of bson.h or dbclient.h, our headers do not see the 'min' or 'max' macros as defined, even if they were.
- If the 'min' or 'max' macros were defined before the inclusion of our header, their state is restored after our headers have been processed
- The state of NOMINMAX is not observably altered by including our headers.

I think this accomplishes all of the above.