Add ByteString variants of shader loading functions

What do you think of adding ByteString variants?  My motivation is this TH hack to read the shader files at compile time, so the executable stands alone: https://github.com/bergey/haskell-OpenGL-examples/blob/master/wikibook/tutorial-05-3D/TH.hs