La resolución del método genérico C # falla con un error de llamada ambiguo

Supongamos que he definido dos tipos no relacionados y dos métodos de extensión con la misma firma pero con filtros de tipo diferentes:

public class Foo {}
public class Bar {}

public static class FooExtensions
{
    public static TFoo Frob<TFoo>(this TFoo foo) where TFoo : Foo { }
    public static TFoo Brob<TFoo>(this TFoo foo) where TFoo : Foo { }
}

public static class BarExtensions
{
    public static TBar Frob<TBar>(this TBar bar) where TBar : Bar { }
}

Entonces cuando escribonew Foo().Frob(); Me sale un error

error CS0121: The call is ambiguous between the following methods or properties: 'FooExtensions.Frob<TFoo>(TFoo)' and 'BarExtensions.Frob<TBar>(TBar)'

¿Alguien podría explicar por qué esto falla y cómo evitarlo?

EDITAR: Esto sucede en VS2015 Update 3 y VS2017 RC.

EDIT2: La idea aquí es tener una API fluida que funcione en una jerarquía de clases:

new Foo()
  .Frob()
  .Brob()

Respuestas a la pregunta(1)

Su respuesta a la pregunta