Bug fixes and improvements: fixed #1, fixed #2, fixed #7

- Crossing conditions now immediately adjust to take the existence of a start dummy into account. Behaviour across the board is less finicky as a consequence.
- Instead of choosing one word for a particular length and then moving to the next word length if that word is found to be lacking, now we check all fitting words of a particular length in random order before we start trying words of smaller lengths.
- Choosing the next starting position is no longer deterministic. Instead, a starting position is chosen with probability proportional to how many potential crossings the word to be placed can have.
- Additional check in isValidStart() to prevent bug that allowed invalid starting positions.
- getAllowedWordLengths now takes starting dummy character into account if active.
- Removing dummy chars from conditions should not pose any problems now.
- Refactored checking for too small word lengths. Now it should be less problematic.
- Getting the best state at the end has its own separate function now: getBestState().
- Increased number of candidate starting positions for each round.
- Removed checks for ovewrites now that #1 seems to be fixed.