Replace hardcoded testing for availability to runtime testing for queues

Straight forward runtime check instead of compile time check to decide which queue macros to use on what OS.

Solves https://github.com/CocoaLumberjack/CocoaLumberjack/issues/297
It seems to me that similar `#defines` get properly redefined without the need to `#undef` first.
Also any macro with these particular names all should do the same thing.

I think we can merge it as it is, but I would really like a pull request to bring some sanity to all our version checks.