How to use metaprogramming for opening and customizing the String class