Portable macros in base/macros.h

Fix #216.
It still does on my machine, says Jenkins.  Maybe that was fixed in the newer VS version that you use?  That begs the question of compatibility with VS Express though...