Atomic locking implemented using low-level code

Using System.IO.openFile in conjunction with function from directory
package System.Directory.doesFileExist is not atomic. For that reason we
now use low-level C bindings that enable us to open file with o_CREAT
.|. o_EXCL. That is if lock file already exists open fails with eEXIST
errno.
Bumping version to 0.3.0.0