Fix linux version of out::open()

On linux, you need to "stretch" the file before you mmap it.
You also need to pass the permissions to ::open() if you are creating
the file.
Update CMakeLists.txt

New CMakeLists.txt is based on the work of one of retep998's friends.
Modified it to link with libc++abi, as it's needed by libc++ on linux.