Reverted ScmWriteContext from ScmObj to plain struct

The original plan was to put info needed for shared/circular write
in WriteContext eventually and attach it to the port object.  However,
it turned out the 'mode' and the shared/circular write context
should have different scope---'mode' only propagates from the entry
of Scm_Write API upto the leaf writers (e.g. class->print); the
leaf writer may call Scm_Write etc. directly or indirectly, with
different mode.  The shared/circular context must live across
this recursive calls.

So we keep ScmWriteContext just for non-recursive info, and use
port->recursiveContext for others.
Style cleanup
Fix a simple bug
Some more code cleanup