Derive `mapreduce` visitor for the AAST
Summary:
`mapreduce` lets us `fold_map` over the AAST.
This is exactly what we want to do in a _validating elaboration phase_ such as naming where we rewrite hints to canonical form and accumulate errors (at the moment errors are a side-effect *but* we'd like to collect and manipulate them)
I'll use the new visitor to break apart and reimplement the OCaml naming phase before moving to Rust
Differential Revision:
D40759727
fbshipit-source-id:
a205b126c3586f19a3a85b0a0248287e7749532f