More cross-platform work
- Made CMakeLists.txt avoid Win32 code on Linux and vice versa.
- Made abstract file and random providers use abstract factory
- Moved abstract random and file implementations to separate files
- Fixed file creation