Intelligently choose positions to place new words

- New words are now placed as closely as to the upper-left corner as possible.
- Printing the crossword is now a separate function. Can be used to print the crossword at various stages of the algorithm.
- Created maxRounds:a global var for how many times it will try to add a word.
- terms is now a dictionary. It keeps track of positions of words as well as the words themselves. Someday it may even completely replace the grid?
- Added progress bar.