How to create file repository from which I can link files to other content types?
As said in the comments: 

Media module is just the thing you are looking for. We are also using it in our project, it's pretty good and solves all the problems you listed.

It's maybe also important to mention that this is going to be part of the core very soon (8.4.x).