Runtime detection of Mono

Currently, the Mono 4 build of Ninject is required to run Ninject on recent versions of Mono. This complicates the use indicated by the questions in newsgroups, Stack Overflow. In addition, using NuGet for a solution running on Mono is out of the question.

This pull request attempts to eliminate the need for the Mono 4 build by replacing compile time directives with runtime detection.

Mono 2 and 3.5 are not affected.