make MwObj a role and MwObj::Page consuming it
Sleipnir computes the narrowest common type that selected Sources produce

Sources that produce only StdPages are boring. We decide a Source can now
output anything (preferably something under Sleipnir::MwObj, but hey).

But Sleipnir is using the Source output type (previously fixed to StdPage) as
an input for its Processor input/output type checker:

       Source    --->        Processor 1        --->  ...
    (produce A)        (expects B, produces C)

here, ensuring A = B was easy (`B eq 'StdPage'`). Checking `B eq A` is easy
too, but we may have *more than one Source*:

      Source 1   --.
    (produce A1)   |
         .         |
         .         |->       Processor 1        --->  ...
         .         |   (expects B, produces C)
                   |
      Source n   --'
    (produce An)

So, it is necessary that B is a supertype of A1, ..., An; but we don't want to
end with "Moo::Object" nor other useless supertypes: we're interested in the
"narrowest" one. By analogy with the GCD, we call the "narrowest common type
of A1, ..., An" ("NCT(A1, ..., An)") such a supertype.

This commit:
    - translates MwObj::* from a hierarchy of roles into a hierarchy of
      classes under MwObj (Moo doesn't support role hierarchy introspection,
      so we use @ISA);
    - implements two functions in Source to compute NCTs;
    - makes use of NCT in Pipeline (at the earliest stage of flow creation).
allow for other core implementation than Pipeline to be easily used