inherited class & proper abstract keyword handling

There is a case where FCS says that the Tuple type members Equals/GetHashCode... are abstract but Intellisense doesn't show it as such (they are dispatch slots). So previously I added a check enforcing that the enclosing type should be abstract or an interface.

But if you have a non abstract class with an abstract member + default member, the abstract member is will be considered as a normal instance member because it is not an abstract class nor an interface class.

So, I added another check: ``mem.EnclosingEntity.IsClass && mem.EnclosingEntity.IsFSharp``.

I feel it's kind of incorrect, but do you have any suggestions?
`BaseType` property throws exceptions  quite often.

I think it would be enough to check `typeDef.IsValueType` or `typeDef.IsEnum`. Notice that we check it directly on current type entity, not base type entity. Value types can't be inherited anyway.