text: Title: Add support for pipelined visitor functions
  Body: This would allow for a meta-visitor that applies the required visitors in the provided order. This separates the initialization from the steps of the visitors, which is a little more readable. 
  
  This could look something like: 
  ```python
  visitor_fn_1 = ...
  visitor_fn_2 = ...
  visitor_fn_3 = ...
  
  visitor_fn = pipeline(
       visitor_fn_1,
       visitor_fn_2,
       visitor_fn_3,
  )
  block.visit_and_update_expressions(visitor_fn)
  ```
  as a replacement to 
  ```python
  visitor_fn_1 = ...
  block.visit_and_update_expressions(visitor_fn_1)
  visitor_fn_2 = ...
  block.visit_and_update_expressions(visitor_fn_2)
  visitor_fn_3 = ...
  block.visit_and_update_expressions(visitor_fn_3)
  ```