REDGUY: Osobně bych volil přístup 1. Není to takovej "voser", jak se zdá na první pohled a má to několik výhod: a) je to jednoduchý b) management toho kontextu není v režii knihovny, ale volající aplikace, což může být důležitý c) je to nejvýkonnější řešení d) dobře se to testuje (viz např. ring).
^dynamic pro tyhle účely vypadá lákavě, ale má hromadu "drobných" problémů. Některé zmiňuješ, další čekají za rohem.
řešení 3 vede k tomu, že budeš pálit čas vymýšlením, jak se zbavit duplikace kódu a udržovat všechno (včetně oprav a refaktoringu) aktuální
Pro vysvětlení od povolanějšího můžu doporučit k přečtení tohle (vč. komentářů):
On the Perils of Dynamic Scope | Digital Digressions by Stuart Sierra
http://stuartsierra.com/2013/03/29/perils-of-dynamic-scope
Všecky varianty se tam v zásadě probírají...