TextDocument: lazily convert substitution mapping to unicode

This way, the substitution mapping method can return a dynamic mapping,
the only requirement is to implement __getitem__
3 jobs for feat/lazy_substitute_content in 0 seconds
Status Job ID Name Coverage
  External
passed ERP5.CodingStyleTest-TestRunner1

01:11:58

passed ERP5.PerformanceTest-TestRunner1

00:32:35

failed ERP5.UnitTest-TestRunner1

07:47:26