Bot Update! - READ - IMPORTANT - some instructions below!
Changes:
1. Added a menu on launch where you can choose your opponent, player or bot
2. Game remembers last opponent and if you choose next round after a finnished game, you will meet the same opponent again
3. Added a method that initiates the bot chosen in the menu - IMPORTANT - add the method that starts your bot here, see case "Linus" as example
4. Changed a lot of methods to require an argument (type of opponent), player vs. player is called "pvp"
5. Changes in GameMechanics.NextRound() so it only outputs message if the player is a human.
6. Made two separate methods in Program to start the game differently depending on if opponent if human or bot. Added a few comments to make this more clear.
7. The bot sets its own name in UserGreeting.PvpOrPve in the switch case - IMPORTANT - Add the name of your bot here!
8. Removed unused libs and changed names to fit naming conventions
9. Added a beta of MonkeyBot, very dumb, and may cause crash.

Note:
Do not change your names that you see as arguments, this is to keep track of bot creator, just add botname where the comments tell you too.
I've been throwing the string variable for type of opponent (which has the value "pvp" or the bots name) arround thru lots of methods, this could be done more pretty with a global variable. I didn't realize it had such a long way to travel before it was too late. But I'm out of coffee now ...
IMPORTANT - For your bot to place a piece, DO NOT hard code into the boards, use PlaceMarker(position); (where position is a string with value ex. "A1") - this makes sure everything works correctly.
Take a look at MonkeyBot for an easy way to translate a 0-8 array/list to A1 -type of positions via a Hashtable, if you wish.