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.
Writing tests for the case.