Improvements to level saving

1) Avoid manually calling Close/Dispose on streams -- it's done automatically when using() scope is exited.
2) Reset "changed" BEFORE saving, to ensure that any changes that happen during the saving process are not ignored in the future.
3) Use File.OpenWrite() instead of File.Create(), which does not throw exception if target file already exists.
4) Use File.Replace() instead of File.Move() to safely (atomically) replace existing files and make backups.