Optimizing LLVM Pass Sequences with Shackleton: A Linear Genetic Programming Framework