Add synchronous save methods that return a success state and optional NSError

Closes #299
Closes #685
Don't dispatch save completion blocks to the main thread

This was causing UI pauses and unnecessarily blocking the main thread for people who didn't want that.

Closes #425