NH-3675

https://nhibernate.jira.com/browse/NH-3675
Initial implementation with unit tests
Because it uses "is-as" checks. A preffereble way is to use "as" and compare to null. Mainly because "is" and "as" are compiled to the same IL opcode "[isinst](http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.isinst)".