Added speedups for uppercasing and lowercasing.

Steven Soroka reported on the mailing list that String.downcase takes a very long time on long strings.

This is a patch to fix that by doing the conversion into a list where appends are cheap and then converting the list to a binary at the end.

There may be cleverer ways to do this so let me know. Once you're happy I'll have a look through unicode module for other functions that could do with the optimization.