core: Add BlockingQueue

Implement a simple blocking queue with optional bounded memory use.
fs: Add FolderWatcher

Use OSX-specific FSEvents API to watch for file changes.
The addWatch interface is work-in-progress (it works but is not very convenient for callers)
gfx: Minor geometry improvements

Buffer::lock is now templated; add uniform buffer support and add more assertions
fs: Change FolderWatcher to use listeners

Also dispatch events from a thread that explicitly calls processChanges.
Implement shader reloading.

Use FolderWatcher to track changed files, recompile the shaders and relink the programs that used them.