simplify errno implementation

the motivation for the errno_ptr field in the thread structure, which
this commit removes, was to allow the main thread's errno to keep its
address when lazy thread pointer initialization was used. &errno was
evaluated prior to setting up the thread pointer and stored in
errno_ptr for the main thread; subsequently created threads would have
errno_ptr pointing to their own errno_val in the thread structure.

since lazy initialization was removed, there is no need for this extra
level of indirection; __errno_location can simply return the address
of the thread's errno_val directly. this does cause &errno to change,
but the change happens before entry to application code, and thus is
not observable.
diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
index 2e910b3..650e811 100644
--- a/src/internal/pthread_impl.h
+++ b/src/internal/pthread_impl.h
@@ -18,7 +18,7 @@
 	uintptr_t sysinfo;
 	uintptr_t canary;
 	pid_t tid, pid;
-	int tsd_used, errno_val, *errno_ptr;
+	int tsd_used, errno_val;
 	volatile int cancel, canceldisable, cancelasync;
 	int detached;
 	unsigned char *map_base;