Improved new word positioning based on crossings with previous words

- Instead of trying to place new word in the first valid position, keep some candidate positions and pick the best one. The more crossings a new position has with previous words the better it is considered to be.
- Maximum number of candidates for the starting position is a constant that can be set.
- Finding crossing points of a new position with previous words in now a separate function: getConditions().
- Fixed ignoring certain possible starting positions.