Preexec event

Issue: https://github.com/fish-shell/fish-shell/issues/1549

Implemented a solution as event instead of a function call as discussed here: https://github.com/fish-shell/fish-shell/pull/1550
Added documentation as discussed here:
https://github.com/fish-shell/fish-shell/pull/1563

Added a postexec event as well for completeness

Usage:
```
function preexec_test --on-event fish_preexec
  echo preexec handler: $argv
end

function postexec_test --on-event fish_postexec
  echo postexec handler: $argv
end
```
This documentation suggests it's based on executing commands. It's actually based on running a command-line input. This could be a command, or a builtin, or a function, or a pipeline, or it could even just error out.