WIP make programs thread-safe

Yuck. Well, we can't use a bo per program like radeon because we
only have a single address for the code segment which has limited
size so we have to be able to swap out.

Or do we just use a really really big code buffer and not spill ?
What if users make multiple really really big programs ?
WIP more ugliness