The answer to 1,2, and 4 is pretty much the same. Extension methods are simply static methods with some special syntactical sugar. This:
public static void DoIt(this string str) {
// ..
}
"test".DoIt();
Is effectively the same IL as:
public static void DoIt(string str) {
// ..
}
DoIt("test");
The former method makes it much easier to provide IntelliSense support though. The restriction of the class needing to be static is probably just a design decision, or maybe performance related.
The answer to #3 is that's just the syntax the language designers chose. C# developers are used to this refering to the instance object. They could have called it blah, but it wouldn't have been as obvious as to what the instance object is.
Using the this keyword in an extension method also tells the C# compiler to mark it with the ExtensionAttribute. This attribute is used by consumers of the assembly to find extension methods.