The Functions class wants to store functions in a map and hand them out later, so we need a shared_ptr. (could have had a map of name -> function factory, maybe one day)