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.
I feel like it is a good idea to allow at least paths relative to the extra_conf-file's location for the return value of ```CSharpSolutionFile```.  I expect most of the use cases to be trivial, either working around ambiguous files by explicitly naming one, or by pointing to a file not directly on the way up the directory tree.  Not allowing relative paths would mean unnecessary work for the user.

On the other hand trying hard to make use of the filename if the path itself could not be resolved is probably one feature too much and I have removed it, which leads to some simplifications including ```preferred_name``` being dropped.