Use zod to do runtime validation and throw if incorrect. This PR only adds validation for ExternalFunction, will validate other options in follow on PRs.