An alternative approach which avoids adding/changing methods to/in String and Array

I probably ought to have split some of these commits into their own pull requests, but I was in a rush! The main changes are in this commit - 0614df697f5e1a261e237c1d961c428732179624. One of the nicest things about this approach is that you no longer need to worry about the "special" tags where tag names collide with existing method names.

Please don't feel under any pressure to incorporate these changes - I just wanted to demonstrate the different approach which was briefly discussed at OXRUG.

Obviously there's a downside to these changes in that they make the code slightly more verbose, but in my experience monkey-patching built-in classes tends to lead to nasty problems down the road!

The first three commits are less controversial and so you might be more comfortable incorporating those.

- 650a8bfdacb514c2e7bcf9f8fc60adbd15a9e261
- 2b07b5c4f1702ba263f45cb909838e2a2bc7fd65
- 0da9aa052e6eac6da674ef1ea28996f0d1b9bfb9

I'd be happy to supply them in a separate PR if you were interested.