I don't think C is correct. I would say, "It's (it has) been a long time since I ('heard' or 'have heard' are both understandable here, but 'have heard' is probably more correct) anyone whistling a tune on the street." But that's assuming it's present tense you're using.
C sounds odd to me. Understandable, definitely, but it doesn't strike me as the correct usage.
I think quite a few native English speakers would have trouble with this question. Certainly C is correct. However, in speech where the conversation moves rapidly the grammar might not keep up with the quick delivery. Your main concern, then, is if you are writing. Then you need to study what you have written and make sure that your grammar is okay even if it sounds good when spoken.
No, I'm pretty sure that you'd use past perfect (I think that's the term) to describe the time between the last time you heard somebody whistling and the present.
I think that using present tense describes the time itself, not the qualities thereof in this particular instance as opposed to other instances. But I'm not going to pretend to be an expert on formal grammar, so I may be wrong on this.