As noted in #93 our eval method is getting out of hand. Break it down into smaller chunks, and make sure it doesn't have the struct-methods on the hot-path.