Refactored the OptimalMatch struct and implemented Unwind
Refactored the OptimalMatch struct and implemented Unwind

As the OptimalMatch struct contained 3 HashMap<usize, HashMap<usize, T>> in the original implementation but they were all added to at the same time I felt it was better to create an inner struct MatchScores which contains all the data used to score a match (the match itself, pi, g and the length). Then I just have a HashMap<usize, Vec<MatchScores>>. Although this still isn't the prettiest of structures it's definitely an improvement.

Refactored the code to take into account this and then implemented unwind with this new logic which was definitely more pleasant than I was expecting.

xd009642/zxcvbn-rs,xd009642/zxcvbn-rs