Factor out binary tree

Going to use it in some more stuff, no reason for it to be cluttered in
a single file
Print all paths in a binary tree

Should be O(n) because it has to visit each node once. Could probably do this
iteratively instead of recursively but I REALLY LOVE implementing recursive
functions.
Implementation of Levenshtein distance

Could be improved with the existing recursive implementation by memoizing the
lookup on substrings into a constant time function (eg: using a dictionary).

This works by finding the minimum number of steps necessary to turn one string
into another by recursively taking substrings and then either saying that
two parts of a string are identical (have the same character) and then there
is a minimum number of steps required to replace the remaining characters,
or the substrings are completely different and it takes MAX(size(str1), size(str2))
insertions to get from the first to the second.