Remove the last vestiges of the 'function' keyword.

Once all the syntax errors were fixed, without a functioning build, it
was too easy to miss the function keyword - me coming from php doesn't
make spotting it any easier either.
Add missing using; directives.
Add required missing non-abstract empty constructor bodies.

C# is a stickler about that, apparently.  Not having them wasn't a
syntax error and so I didn't see that until now.
Fix HandSpecifications' broken method signatures.

C# doesn't support covariant return types.  Each HandSpecification's
newHand() method is to return the corresponding subtype of Hand.  I
thought I could make it a base class abstract method that returns a
Hand.  Furthermore, I thought I could have implementers in the child
classes, returning subclasses of Hand and still honor the interface
contract.  Unfortunately, that is not the case.  None of these
Specifications would even compile unless they had the exact same
signature as their base class.
Remove another lingering bit of php syntax from Hand class.

The more rocks I overturn, the more the smaller birds keep scurrying
out!
Change Hand.Cards from type Card[] to List<Card>.

I'm too used to php, which has automatically resizable arrays.  In
fact, it's unfortunate that they're even called arrays - they're no
such thing - they're implemented as ordered hashmaps!
Rename BestHandIdentifierTest.DealtHand to DealtCards.

This clears up an inconsistency in the story of the test: You don't
deal a Hand - you deal Cards, and try to identify a Hand out of them,
the best Hand that you can.
Change the type of BestHandIdentifierTest.DealtCards to List<Card>.

Leaning on the compiler is helping me to align the return types of
methods to the types of variables they assign to, heh.
Use the correct form to assert instance-ness.

Thank you, compiler and stackoverflow.com, for pointing me in the right
direction!
Get BestHandIdentifierTest to Compile, Part I.

I missed this one - monodevelop thought it was being helpful when it
auto-completed the Card class instead of the card variable of the lambda
expression that I actually wanted.
Get BestHandIdentifierTest to Compile, Part II.

The test uses LINQ, so I needed to add the using directive for it as
well.  The problem was that initially, autocomplete wasn't suggesting
System.Linq as one of the available namespaces, and it in fact, wasn't
available, until after I added System.Core as a project reference.
Get BestHandIdentifierTest to Compile, Part III.

My big blob of test data was poorly formed, I couldn't use Types
directly in this context, so I had to wrap the class names in strings.
This also had other consequences with the way I could call the
activation code to instantiate the various Hand-subclassed objects.
Get BestHandIdentifierTest to Compile, Part III.

I guess Microsoft discourages this type of reflection, or at least
recognizes the potential security risks it presents, since when all you
have is a string of the classname you want to instantiate, and not just
call the default constructor (Hand has no such constructor,
incidentally), then you have to use this big bad overloaded method to do
it.  The MSDN docs don't mention it explicitly, but stackoverflow and my
own experiences confirm that you can pass null for all the other
parameters and apparently the proper defaults will be used.
Get BestHandIdentifierTest to Compile, Part IV.

It's been a while since I've worked in a strongly typed language - I'm
not used to all the explicit casting that needs to be done from time to
time!
Get CardBuilderTest to Compile, Part I.

Though the var keyword most certainly helps, I'm not used to having to
use any kind of type specifier at all.  Php does have a few non-retarded
bits, after all. Not many, and they certainly don't even come close to
making up for all its faults!
Get CardBuilderTest to Compile, Part II.

The constants need to be marked public - it's not like in php where just
every const is always public, whether you want it to be or not....

Also, the scope resolution operator, ::, means something else in C# -
gotta love the false cognates!
Get CardTest to compile.
Silly typo fixes.
Get DeckTest to compile, Part I.

If you're gonna make unqualified references to classes in the generic
collections namespace, you need to use that namespace first.
Get DeckTest to Compile, Part II.

Static methods aren't globally accessible, you need to reference them
through their class name!

And while it was a Good Thing(tm) to name class instances after their
class name in php for readability, in C# it can sometimes get you into
trouble, or at least, confuse the compiler, as was the case here with
Suits.