(refactor) Change all the things

This PR is a wide-reaching, fundamental refactor to the way Iron
works.

It includes these changes, but probably more. I recommend reading the source
if you want an exhaustive list of changes. I will detail all of the changes
in a blog post in the near future.

- enter/exit -> before/after
- introduces Handler and removes special treatment of Chain
- Clone -> Send + Sync
- Alloy -> Plugins
- Better Error system and the error type from rust-error
- various other things about the place

Not ready to merge. Waiting on further changes and debugging.
`std::mem::replace` requires substituting in a value of the same time. Without Nop, that either requires `unsafe`, so `std::mem::unitialized` or `std::ptr::read` would work, or using an `Option` and then doing `Option::unwrap` in `Handler::call` for this Chain.