Make the files mapper recursively

This resolves issues on windows, when a parent folder had an index in the past
but the conflicting folder has been removed. Previous to this patch this would
cause a mess on the MappedStorage, since new children are not added to the
correct folder anymore.

Now the method is build recursively, so it correctly uses the parent physical
path instead of trying to recalculate it.

Fix #11103

@th3fallen @DeepDiver1975 @rperezb @icewind1991 @jnfrmarks
* `~.....~` the `~` are the limiters of the regex (start and end of the regex and can be an arbitrary symbol)
* `\.` is an escaped dot (because in regex a dot means a arbitrary character)
* `+` is shorthand for 1 or more occurences
* `$` means at the end of the line

The change would result in a better readable code (and I guess a faster one)