Restructure of the project

Refactored the solutions for problems 1, 2, and 3 to use common constructs in separate packages, grouped under the "common" package.

Additionally, added a super type to the solution classes named "Problem." This streamlines the testing process of the solutions, as it forces its implementations to set an input and describe a solution using the solve function, among other things.

This super-typing allows for some other neat things, too- like being able to run a solution object without a main method. try it with _1.scala, _2.scala, or _3.scala :)