Fix bug in IOAble.save
Fix bug in IOAble.save

-casting the file name to a string caused saving of nested objects to
break
-Expected behavior is that calling object.save with a string filename
opens that file, and then calls save method on nested objects but
with file_name=open file object, so they all write to the same file,
appending new info
-Casting file_name to a string caused the nested objects to each open
their own file, overwriting the old one.
-file name no longer cast to str, but a temp variable is created
to check file extension
-file extension also only checked if file name is str or path-like
to avoid possibility of object name getting confused with file path

PlasmaControl/DESC,PlasmaControl/DESC