Fix unsubscribing from newsletter
Introduce authorization events
Rename authentication handler
Rename package `byceps.signals.auth` to `byceps.signals.authn`, rename signals
Rename package `byceps.events.auth` to `byceps.events.authn`
Introduce authorization domain service
Pass user object instead of ID to `authz_service.deassign_all_roles_from_user`
Pass user object instead of ID to `authz_service.deassign_role_from_user`
Pass user object instead of ID to `authz_service.assign_role_to_user`
Announce newsletter (un)subscriptions
Introduce newsletter events, domain service
Introduce `SubscriptionUpdate`
Move `SubscriptionState` to `byceps.services.newsletter.models`
Pass newsletter list objects instead of IDs on newsletter (un)subscription
Verify newsletter list ID for brand before user creation
Introduce `newsletter_service.get_list`
Move `UnknownListIdError` to separate errors module
Pass user objects instead of IDs on newsletter (un)subscription
Return 401 instead of 403 from site login for invalid credentials