imagettftext() uses the last charactermap it found and not the one you want

Summary:
This caused issues when you picked a font with multiple maps, it wouldn't
pick the unicode version but instead pick the last one it saw. Change so
we cache on a per encoding level. There was even a todo list item in the code.

In an ideal world we can probably iterate through at font write time.

Test Plan:
See said unit test, it's Apache Licensed font included