Added snapshot capability

Now, you can create a point in time snapshot of the file. New appends will not be reflected in the snapshot.
Following functions were added:
1. CreateSnapshot - Returns the file name of the snapshot
2. DeleteSnapshot - Needs the snapshot name
3. DeleteAllSnapshots - Deletes all the snapshots for the file

When the file has a snapshot, it does not allow you to overwrite, undo or de-fragment a file.