Allow for passing a specific filename to Middleware.save

Also return the filename instead of the return value of .open()
This allows for overwritting the same file when calling .save
manually as well as keeping track of the exact file written (using
the return value)