Fixed #9893 -- Filename could exceed max_length on a collision

Passing max_length argument into the Storage's save() and get_available_name() methods.
Rewriting get_available_name() so filenames do not exceed max_length when there is a collision.
Adding test for the case.
Wouldn't it be better to use something like `min(7, max_length - len(name))` here instead of `7` (and fail directly if  `len(name) == max_length`) ?
That way, we wouldn't have to generate random suffixes and then realize later that we should truncate them.