Add most of source code of the first part.
Update .gitignore.
Remove Java7-specific code.
Implement writing on file.

The static method PuzzleParser.writePuzzle() takes a SolvedPuzzle and a file
name as arguments, and writes the puzzle to the given file according to a
specific layout.
Fix throws declaration in IUnsolvedPuzzle.solve().
DOCS: add main structure of report for part 1.
Report: add algorithm description.
Report: add some interface explanations.
UnsolvedPuzzle.java: add checks on puzzle pieces.
Add testmaker utility.
PuzzleParser.java: add linefeed at the end of output files.
UnsolvedPuzzle.java: fix bug in puzzle piece checks.
Update OOP section.
Add class hierarchy diagram.
Remove useless PuzzleParsingException class.
Add consistency check in .solve().
Report: add package description.
Report: add section on Java version.
Report: add compilation and execution section.
Update Makefile.