Add before_* and after_* to controllers and routers

Hello everyone, this pull request:

  * [ ] Move to latest Plug (allow us to get rid of some code!)
  * [ ] Deprecate assign_status and assign_layout in favor of put_status and put_layout
  * [ ] Allow controllers to be used in Plug stacks, for example, `plug UserController, :show`
  * [ ] Improve controller docs
  * [ ] Add `before_action/2` and `after_action/2` with support to guards to filter by action/controller