Adds more runInOrderedSet test cases to cover jokers at the end of ascending sets and beginning of descending sets.
Simplifies the logic for run detection, as a happy side effect of fixing a defect with jokers at the end of ascending sets.

Now, the jokers are stripped, then the cards are sorted, then the jokers are put back at the same indices they occupy in the original set. No more complicated nested if statements, yay!
Duplicates the ordered run test cases, this time testing the scores instead of whether or not the set makes a run.
Fixes a bug in a test case validation — 6+4+3 = 13.
Adds some ivars to hold the valid-set-only analogs of the ideal scoring arrays.
Adds a method to say whether or not an ordered set makes a meld where all cards have the same value or are jokers.
Adds a duplicate of the meldOfMelds method, this time dealing with the valid-set-only arrays. Wasteful—this should be refactored so there’s one method with a BOOL parameter to say which kind of meld array to touch, and then pointers to reference the right ones.
Adds a method that copies a bunch of logic from evaluateHand, and repurposes it to return the best scoring meld in the allValidMelds array. Like with the last commit, this is wasteful & messy and should be refactored so the same logic is used as for ideal melds.
Hooks up the findActualScore method to the score calculation. And with that swell foop, all existing test cases for scoring pass!
Some refactoring to make consistent findBest/Worst/ActualScore methods.
Documents the scoring methods.
Consolidates to a single sumOfCardsIn: method to reduce code duplication.
Updates the code comment for runInOrderedSet to reflect the revised logic from last night.
Strips a TODO-style #warning I no longer think is true, because the current method of getting frequency passes all test cases, and ‘correcting’ the off-by-one fails a bunch of them.
More refactoring: moves building all valid melds out into its own method.
Condenses building the collection of all valid and potential melds-of-melds into a single method called in evaluateHand.
Removes an out-of-date comment line (we’re finding valid value sets as well as valid runs here).
Strips some old debug logging lines.
Logical reorganization: groups together all the methods that have to run to find potential melds into one method called by evaluateHand, just like the one to find valid melds.
Hand method reorganization — restructures the code to flow more logically (methods called by one method always come before it, and in the right order) and adds pragma marks to divide up the different logical tasks.