Refactors read/position-marker code

Most of implementation details hidden away in read_files.cpp to keep
the opencl_full.cpp tidy