Fixed bug with nullable + default value

Trying to serialize a nullable containing the default value (e.g. 0 for
int) triggered a failure. Since Traverse for nullable types recursively
called Traverse, the Traverse operating on the underlying had no
knowledge/context of the nullable and considered 0 as a default value,
omitting it.

Fixed by separating the traversal entrance checks from the actual
traversal (i.e. dispatching to TraverseScalar, TraverseObject...)