Fix comparison operator ambiguities between Value/Document

As mentioned in #113, there are several ambiguities reported on several compilers, when using the templated `==`/`!=` operators.  The patch in a9add7b only fixed the issue for `GenericValue` objects, still causing ambiguities when comparing with a `GenericDocument`.

This pull-request should address this issue, disambiguating arbitrary classes derived from `GenericValue`.
Tested on:
 * MSVC 2005, 2008, 2013
 * GCC 4.4 – 4.9, Clang 3.4 – 3.6 (Linux)
 * GCC 4.3 (Cygwin)

Due to some bugs in MSVC 2005, the template meta functions required some changes.  Strangely enough, the `GenericValue(bool)` constructor broke with the previous traits after adding the constraints to the comparison operators.  The current implementation now works on MSVC 2005 again.  Still, a sanity check has been added to the constructor.