Added `File::generateFilePath`

This method is reponsible for returning a writable path in which PHP can store things. If it is called with the same arguments it will return the same file path (so it can be used to save configurations, caches, etc)
Improved tests and cleaned up the code

The `Object Cache` now relies on `File::generateFilepath` for generating the cache file path
Expose a way of modifying the prefix of `File::generateFilePath`

By default it uses the prefix as a directory and store everything in the OS temp directory.

```php
File::overrideFilepathGenerator(function($prefix) {
    return sys_get_temp_dir() . DIRECTORY_SEPARATOR . $prefix . DIRECTORY_SEPARATOR;
});
```