Threads

Intro the `threads` module with support for POSIX threads, mutex and barriers. Also provides 2 ways to have thread-safe collections: refining existing collections and sub-classing them.

TODO:
* Complete the collection support.
* Modifiy `print` so that printing the user content and the new line is (generally) atomic
* Add more examples/use in real programs
* Reinforce error support.
* Fix compatibility with FFI's global refs.
* Add, when needed, GC_THREADS to `gc_chooser.[c|h]`
* Do not include `gc.h` when not using libgc

ping @egagnon
Je me demande si une implémentation par proxy n'aurait pas été plus simple générale

~~~
redef class Collecton[E]
   fun as_concurent: ConcurentCollection[E] do return new ConcurentCollection[E](self)
end

redef class Sequence[E]
   redef fun as_concurent: ConcurentSequence[E] do return new ConcurentSequence[E](self)
end

class ConcurentCollection[E]
   type REAL: Collection[E]
   var real_collectuion: REAL
   var mutex = new Mutex
   # Tas de `redef fun`...
end
class ConcurentSequence[E]
   redef type REAL: Sequence[E]
   # Tas de `redef fun` suplémentaires...   
end
~~~