Raise exception Bad_option for unparseable or invalid options.

Fix for issue #56.
This `report_error` doesn't depend on local variables in this function, it would be clearer to lift it out into a top-level function (but not expose it in the `mli`).  It would make the control flow in the `unmarshal` function easier to follow.