[C150_I] Reimplemented Binary Search as HashSets! Continued cleanup.

- Cleaned up formatting for presentation
- Altered Phrase's target weight to 85% of the max weight, provides more
  accurate results
- A word's weight was being calculated many times, and unneccesarily sometimes.
  Weight is now called only when needed and is not set during construction.
  This saves a few cycles when dead ends are reached and a lookup/calculation
  is not needed.
- The weight calculation has been simplified and still accounts for the length
  the word in addition to it's frequency
- Word's GetSubMatches method has been simplified into enumerable unions
- Parser's GetMostRelevantPhrases now uses a take variable to determine how
  many top results to return in an IEnumerable<string>
- Reemvoweler was adjusted to print multiple results from the Parser
- Replaced EnabledWords's ReversedEnableWords array with a HashSet containing
  all possible partial matches of words, significant performance increase
  (O(log n) to O(1)). Contains and Matches methods now use the backing hashset.
- Removed Reverse2 Extension, there's no more reversing strings for Binary
  searches