avoid creation of WorkContext by caching a thread local
rename WorkContextTunnel to WorkContextCache
simplify toString()
Cache WorkContext instead of passing it