[WIP] Exception refactoring

Fixes #90 
- [x] Create an `Exception` interface
- [x] Refactore existing exceptions and deprecate old ones
- [x] Create new exception to throw instead of the ones from STD or Symfony
- [ ] Update tests to use new exception class names (works without it because it's BC :v:)
- [ ] Update docblocks with the right version of deprecation
- [ ] Update docs