tried to replace abbreviated names by meaningful ones + finished to rename some method names to match .Net conventions...
replaced the custom Pair<T,S> by a Tuple<T,S>

why not use the .Net objects rather than reinventing the wheel? Microsoft spent a lot of time thinking about everything, so we might as well use them :) http://msdn.microsoft.com/en-us/magazine/dd942829.aspx
moved PromiseError to its own file + made the namespaces match the project name
parameter renaming + typo
switched to abstract types where possible (IEnumerable instead of List etc)

this should be useful at least for the first parameter of Invert<T>() which is no longer required to be a List
moved the examples to their own project. the Promises project now compiles as a dll

also added an AssemblyInfo to the test project I had forgotten.