Updated the dynamic solver to use Geoffrey's functions and division of tasks to make it easier to read

Creating a hint function will not be difficult as the hint function I have is derived from this code, just it will break once it has set a value however, adapting the code for more difficult puzzles is (sadly) difficult. This current implementation will solve basic puzzles.