driver: reduce per-draw GPU overhead a bit

Send new vertex elements state only when changed.
driver: CSO optimizations

- Copy small CSOs instead of dereferencing pointers. We do need to keep
  around the pointer as well to save state for the blitter, but apart
  from that, the state weaving no longer dereferences pointers which
  should be more cache efficient.

- Add likely/unlikely based on the likelyness of a certain piece of
  state changing. Used some guesswork here, eventually it may be useful
  to profile it under various workloads.