Added problem 4, some refactoring

Abstracted out common patterns in the testing file. Added type signatures
for the current solution. Added both answer and testing for problem 4.
Added problems and tests for 5-7.

Additional refactoring in tests, cleaned up some import statements.
Problem 8

Problem solutions and testing. Also extended problem 7 testing.
Removed tail recursion

I realized that Haskell's lazy evaluation may imply that tail recursion does
not have its usual benefits (at least not the ones that I'm used to from ML).
For this reason I undid some of the tail-recursive methods in favor of
simpler methods after confirmation from StackOverflow.
Problems 9-10 added
Problems 11 to 20
Stylistic change to succ/pred where applicable, build warning removal.
Problems 21 - 28