runtime: Gracefully handle modifying literals

Modifying literals is disallowed by R7RS. codegen takes advantage of
this by placing the literals in rodata which allows for deduplication,
sharing pages between processes, etc. When multiple worlds are supported
it will also isolate them from modifying shared constants.

However, writes to the global constants were still allowed which would
typically result in a SIGBUS. That was workable before errors were
catchable and only one Scheme world was allowed at once.

Add checks to the runtime to signal an error if a literal is modified.
As an extra layer of protection add assert()s to the binding to make
failures more deterministic if a modification slips through the runtime.