Mega improvmements to SP's startup variable support from MP. (init-only cvars work correctly)
Mega improvmements to SP's cvar code from MP:
- Cvars use hash lookup now.
- Max Cvars bumped to 2048.
- Using ! in a bind on a cvar is correct now.
- print <variable> command for printing info. (same as /cvarname but useful for when cmd+cvar clash)
- unset <variable> un-sets a cvar entirely if its user created.
- cleaned up set/sets/seta/setu
- /cvarname <with args> now will accept all args instead of just the first
- toggle cmd improved
- cvar range checking code added (though not much actually uses it yet)
- latched+cheat cvar escaping fixed
- cheat cvars aren't hidden from cvarlist anymore
- Possibly a few other misc things I missed.

Fixed and cleaned up SP dll loading in windows.
Now will try the following (in this order):
- fs_basepath/fs_game/<gamename>.dll
- fs_homepath/fs_game/<gamename>.dll (if fs_homepath exists)
- fs_cdpath/fs_game/<gamename>.dll (if fs_cdpath exists)
- fs_basepath/base/<gamename>.dll (if fs_game is not empty)
- fs_homepath/base/<gamename>.dll (if fs_game is not empty, if fs_homepath exists)
- fs_cdpath/base/<gamename>.dll (if fs_game is not empty, if fs_cdpath exists)
- fs_basepath/<gamename>.dll (this is the GameData folder usually)
- fs_homepath/<gamename>.dll (if fs_homepath exists)
- fs_cdpath/<gamename>.dll (if fs_cdpath exists)
- <gamename>.dll (this is cwd aka exepath)