S: unmarshal now returns a (_, string) Result.result type

Replace all the ad-hoc exceptions with a human-readable error
string and taint the affected function signatures.

I'm attempting to keep the result type similar to Core.Std.Result.t
so we can switch over at some point.

Note the new Monad_ module (so named to avoid the name clash with
stdext)

Signed-off-by: David Scott <dave.scott@eu.citrix.com>