Debug: Fixes ambiguous overload issues in ostream fallback.

Debug passthrough to std::ostream& now uses a templated operator<< that
will apply when a type:

    - can be streamed to std::ostream&
    - is not integral (handled explicitly)
    - is not iterable (handled explicitly)

When those conditions are met, a DebugOstreamPassthrough object is
constructed to capture the type's operator<<(std::ostream&) operation,
and uses it to render the value.