Made a profiler

* Now we can see how many times a function is called
* and how much time it spends running in total
Give priority to placing words at the edges of the crossword
Merge branch 'master' of C:/Users/Nikolas/Dropbox/CrosswordGenerator
Extra layer of indexing for faster word search

- Lexicon now stores words like this: First a layer with word lengths. For each length you have a hash table with (position,letter) pairs storing a list of all the words that have that letter in that position.
- Each value in the lexicon is now a id number of a word. The number can be exchanged for the corresponding word and definition in a separate look-up table.
- Searching the lexicon now works like this: First a list of valid words is retrieved for each condition (position, letter). Then, a word is chosen randomly from the intersection of these lists.
- Because the way words are compared with conditions is fundamentally different, dummy chars work differently now. First, the minimum and maximum word length is calculated for a given position, taking dummy characters into account. Then, only words in that range are retrieved from the lexicon. The algorithm never explicitly checks dummy characters from pre-existing words (conditions).
- Changed default number of rounds to 100,000.
- Added comments to isValidStart.
- Added compiled python files to the ignore-list.