Rewrite SyntaxEnv

I'd really like to be able to do something like

struct MapChain<'next, K, V> {
    info: BlockInfo,
    map: HashMap<K, V>,
    next: Option<&'next MapChain<'next, K, V>
}

but I can't get the lifetimes to work out.