Adds nr2char() function and refactors builtin function feature

I added `nr2char()` because I wanted to implement a function that had a non-string argument and this one was used by Surround. Before that, I refactored the builtin function feature in accord with some stuff I did in a previous pull request.

I intend to continue to slowly add builtin functions that have a variety of types and number of arguments and try to mature this feature, also with an eye to supporting functions that are needed by Surround.