cs-completer: improvements for solution detection

I've finally found some time to finish the pull request.  In addition to the changes I've mentioned in #574 I also added tests for the new behavior.

The new code selects a solution in the following order:

  * Try to call ```CSharpSolution(sourcefile)``` on an ```extra_config``` module
    - If the return value is a full path, use that
    - If prefixing it by ```getfile(module)``` (location of ```extra_config```) makes it point to a file, use that
    - Walk up the directory tree and look for the first solution matching the filename part (```basename```) of the return value (not sure if this one is necessary)
  * Walk up the directory tree until at least one solution found on a directory level
    - If it is the only one there, use that
    - Subfolder-hint: If there is a solution named like the first folder on the way towards the source file, use that (#680)
    - Superfolder-hint: If there is a solution named like the folder containing it, use that
  * If nothing works, throw an exception

As for the tests:

First two tests without any ```extra_conf``` file

  * UsesSubfolderHint: ```solution-named-like-folder/testy.sln``` matches the path to ```solution-named-like-folder/testy/Program.cs``` and is picked over ```solution-named-like-folder/solution-named-like-folder.sln```
  * UsesSuperfolderHint: there is no ```not-testy.sln``` to match the subfolder-hint for ```solution-named-like-folder/not-testy/Program.cs```, so ```solution-named-like-folder/solution-named-like-folder.sln``` is used instead

The remaining tests cover edge cases involving ```extra_conf``` files

  * ExtraConfStoreAbsolute: Here the ```.ycm_extra_conf.py``` computes an absolute path to a solution one level above its own folder.  All other solution files are ignored.
  * ExtraConfStoreRelative: In this case ```.ycm_extra_conf.py``` returns ```testy2.sln```.  There is one file named like that next to the source file and one next to the ```.ycm_extra_conf.py```.  The one next to the ```.ycm_extra_conf.py``` is to be preferred over the one closer to the source file.
  * ExtraConfStoreHint: Here the file returned by ```.ycm_extra_conf.py``` is neither an absolute nor a relative path and automatic detection finds a solution named differenly first.  The test makes sure the search continues in that case.
  * ExtraConfStoreNonexisting: Here the ```.ycm_extra_conf.py``` suggests a file that cannot be found, so there is supposed to be a fallback to automatic detection.

A few specific use-cases I had in mind:
 - Some additional setups should now work out-of-the box due to the superfolder-hint.  I know Unity3D-projects with their pair of ```projectname/projectname.sln``` and ```projectname/projectname-csharp.sln``` (with no significant difference between the two I'm aware of) do work now.
 - If detection fails for one specific setup, adding a ```.ycm_extra_conf.py``` that returns a relative path (or at least the solution's filename) should be enough.
 - A global ```extra_conf``` can implement any kind of custom detection for development setups where the existing detection generally fails.

I've signed the CLA