cs-completer: improvements for solution detection

Second take on https://github.com/Valloric/YouCompleteMe/pull/886 .

I have ported the changes to the new ymcd-subrepo and merged them with the ones in the master branch there.  The detection of solutions is now in a separate ```solutiondetection``` module (feel free to rename it) as well, so in ```cs_completer.py``` the path for the solution to be loaded is retrieved through ```solutiondetection.Detect( request_data[ 'filepath' ] )```. I hope you had something like that in mind.
Learn from my past mistakes and make the function signature `def CSharpSolutionFile( filename, **kwargs )`; we'll want to pass keyword args in the future and we'll want to be backwards compatible with older extra conf files. I didin't do this for `FlagsForFile` initially and now calling it is more complicated: https://github.com/Valloric/ycmd/blob/master/ycmd/completers/cpp/flags.py#L105