A nicer Marked type.

This is decoded from our Java Marked type ; I'm actively looking for
a better way to do this, but this works for now.

Also added some tests for source positions, now that we have a nicer
way to deal with Marked.