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?
I think we could use `FSharpEntity.TryGetFullName()` extension method here. By the way, `DisplayName` isn't safe to use either. We should default to some fixed name e.g. `Tmp.fsi` if everything else fails.