Moved most of the TLS logic into user space and removed errno from the kernel (it's also now a lvalue as opposed to an rvalue like in previous versions)