865 refactor files controller

Fixes the first part of #865

- add "model" `RepositoryFile` for files, which is not stored in the database but has validations. It depends on a new lib-class `GitFile` which replaces the `Entry` struct for folder contents. `RepositoryFile` serves for
 - getting file information from the git repository (`content` yields file contents)
 - getting directory information from the git repository (`content` yields directory entries)
 - saving a file to the git repository
- use less hashes and more object methods
- content of a file is now loaded in a lazy way
- remove `UploadFile` class (replace by `RepositoryFile`)
- rename `files` action to `show`
- add routing mechanism `FilesRouter` that checks if a file exists (Also add `IRIRouter` that searches for a given IRI)
- unify error classes which only serve for "there is no such path" to `PathNotFoundError`

Because of restructuring the lib-level and adding new classes, some minitest-tests had to be changed. They have been ported to rspec. There, some methods had to be stubbed, which I used rspec-mocks for.
I do not want to be especially nitpicky, but technically that is not a *router* but a *constraint*. So i would suggest to use that denomination instead.