(PUP-2642) Make default in selector be out of band, raise error nomatch

This makes the selector expression in the future evaluator have
the same semantics as the 3.6.1 current evaluator. The future evauator
did not process default out of band, and did not raise an error when
there was no match.

This fixes both problems.
Merge pull request #2687 from hlindberg/PUP-2642_selector-default-out-of-band

(PUP-2642) Make default in selector be out of band, raise error nomatch
(PUP-2382) FFI typedef for win32_bool / fix User

 - Previously check_token_membership was failing in 2003 spec tests
   due to 2 issues
   - FFI::Pointer::NULL cannot be used in place of our :handle typedef,
     and therefore we must add a new constant of 0 to be used for NULL
     handles
   - FFI defines a :bool as variable width "(?? 1 byte in C++)", while
     Win32 defines a BOOL as int, and is fixed to 4 bytes on x86 and x64
 - Fortunately the bool issue really only bit us in the one spot where
   we were using a pointer to a bool, but by adding a new typedef for
   :win32_bool, all call sites comparing the return value needed to be
   updated for correctness to compare against FFI::WIN32_FALSE
 - A test was added to ensure these APIs are called during spec tests
   on all Windows platforms, and not just 2003
(PUP-840) FFI Puppet::Util::Colors

 - Replace WriteConsole / WriteConsoleOutputCharacter calls with FFI
   equivalents
 - Remove string_encode function as it's no longer necessary and the
   test that was using it