* Added functionality to allow for more complex requirements for functions:
  Before you could specify a function had requirements '(:fragment :330) which
  meant that the compile context MUST contain both of these. Which meant you couldnt
  specify multiple versions e.g. '(:fragment :330 :400) would mean the shader needed
  to be of version 330 and 400 simultaneously. Now you can specify the following
  '(:fragment (:330 :400)) which means the context MUST contain :fragment and MUST
  contain *either* :330 or :400.
* I have update all functions to require :330. This is bodge for now but will be
  expanded upon.
* tweaked compile to make sure that version is added to context.