clarify errors

* use macros for logic errors, not input errors
* throw on parsing failure in `operator>>()`, not assert
* throw on malloc, not assert
diff --git a/include/json/writer.h b/include/json/writer.h
index 2d6dbce..f6fcc9c 100644
--- a/include/json/writer.h
+++ b/include/json/writer.h
@@ -46,7 +46,7 @@
   /** Write Value into document as configured in sub-class.
       Do not take ownership of sout, but maintain a reference during function.
       \pre sout != NULL
-      \return zero on success
+      \return zero on success (For now, we always return zero, so check the stream instead.)
       \throw std::exception possibly, depending on configuration
    */
   virtual int write(Value const& root, std::ostream* sout) = 0;