Allow Macro.escape([1|2])

This fixes #1646

I'm not 100% happy with this change, it adds one list traversal in the common case and another in the uncommon case (improper list). However I couldn't see a better way. I suspect a more elegant solution would involve rewriting do_splice to not use a reversed list as input.