Improve the shader control flow

This gets rid of the weird non-value-returning control path.
Factor shader loading and location finding into a class.
full screen working properly
device rotation stuff
temp fill in else
Merge remote-tracking branch 'hawksley/devices'