Port Matthieu's code formalizing pushouts

This code will (hopefully) allow the epi -> surj in set_cat proof to go
through without hacks and without universe inconsistencies in trunk.

The formalization is a bit slow (at 9s)...

I'm also not entirely happy with the proofs.

After     | File Name                                                          | Before    || Change
-------------------------------------------------------------------------------------------------------
10m25.94s | Total                                                              | 10m19.01s || +0m06.92s
-------------------------------------------------------------------------------------------------------
0m09.54s  | hit/epi                                                            | 0m00.95s  || +0m08.58s
1m43.11s  | categories/Comma/ProjectionFunctors                                | 1m46.58s  || -0m03.46s
0m13.58s  | categories/Pseudofunctor/FromFunctor                               | 0m11.18s  || +0m02.40s
0m34.87s  | categories/Adjoint/Composition/AssociativityLaw                    | 0m36.02s  || -0m01.15s
0m18.96s  | categories/Adjoint/Composition/Core                                | 0m17.80s  || +0m01.16s
0m15.19s  | categories/FunctorCategory/Dual                                    | 0m16.44s  || -0m01.25s
0m10.15s  | categories/Pseudofunctor/Identity                                  | 0m08.38s  || +0m01.76s
0m06.50s  | categories/DualFunctor                                             | 0m05.12s  || +0m01.37s
0m41.75s  | categories/Pseudofunctor/RewriteLaws                               | 0m42.05s  || -0m00.29s
0m25.92s  | categories/Adjoint/HomCoercions                                    | 0m25.73s  || +0m00.19s
0m23.79s  | categories/Grothendieck/PseudofunctorToCat                         | 0m24.10s  || -0m00.31s
0m19.88s  | categories/Comma/InducedFunctors                                   | 0m20.41s  || -0m00.53s
0m17.45s  | categories/Adjoint/UnitCounitCoercions                             | 0m17.58s  || -0m00.12s
0m16.47s  | categories/ExponentialLaws/Law4/Functors                           | 0m16.84s  || -0m00.37s
0m12.69s  | categories/Functor/Pointwise/Properties                            | 0m13.34s  || -0m00.65s
0m12.26s  | hit/Flattening                                                     | 0m12.81s  || -0m00.55s
0m10.03s  | categories/Adjoint/Composition/IdentityLaws                        | 0m09.22s  || +0m00.80s
0m09.55s  | categories/Yoneda                                                  | 0m08.89s  || +0m00.66s
0m09.55s  | categories/Adjoint/Dual                                            | 0m09.05s  || +0m00.50s
0m09.43s  | categories/PseudonaturalTransformation/Core                        | 0m09.30s  || +0m00.12s
0m08.08s  | categories/GroupoidCategory/Morphisms                              | 0m07.76s  || +0m00.32s
0m07.68s  | categories/Adjoint/Paths                                           | 0m06.99s  || +0m00.68s
0m07.68s  | categories/ExponentialLaws/Law1/Law                                | 0m08.01s  || -0m00.33s
0m07.66s  | categories/Functor/Prod/Universal                                  | 0m08.11s  || -0m00.44s
0m07.26s  | hit/Connectedness                                                  | 0m07.30s  || -0m00.04s
0m06.73s  | categories/UniversalProperties                                     | 0m07.61s  || -0m00.87s
0m06.36s  | categories/Structure/IdentityPrinciple                             | 0m06.79s  || -0m00.42s
0m06.12s  | categories/Comma/Dual                                              | 0m06.51s  || -0m00.38s
0m06.10s  | categories/Functor/Paths                                           | 0m06.33s  || -0m00.23s
0m06.02s  | categories/Category/Morphisms                                      | 0m06.29s  || -0m00.27s
0m05.47s  | categories/Functor/Sum                                             | 0m05.47s  || +0m00.00s
0m05.32s  | EquivalenceVarieties                                               | 0m05.70s  || -0m00.37s
0m04.56s  | categories/ExponentialLaws/Law2/Functors                           | 0m04.55s  || +0m00.00s
0m04.52s  | categories/Category/Sigma/OnMorphisms                              | 0m04.66s  || -0m00.14s
0m03.98s  | categories/ProductLaws                                             | 0m03.98s  || +0m00.00s
0m03.63s  | categories/Structure/Core                                          | 0m03.59s  || +0m00.04s
0m03.32s  | HSet                                                               | 0m03.04s  || +0m00.27s
0m03.28s  | types/ObjectClassifier                                             | 0m03.30s  || -0m00.02s
0m03.13s  | categories/FunctorCategory/Functorial                              | 0m03.29s  || -0m00.16s
0m03.00s  | types/Sigma                                                        | 0m03.03s  || -0m00.02s
0m02.93s  | categories/Adjoint/UnitCounit                                      | 0m02.77s  || +0m00.16s
0m02.90s  | categories/Functor/Composition/Functorial/Attributes               | 0m03.58s  || -0m00.68s
0m02.82s  | categories/Adjoint/UniversalMorphisms                              | 0m03.02s  || -0m00.20s
0m02.72s  | categories/Functor/Prod/Functorial                                 | 0m02.53s  || +0m00.19s
0m02.72s  | HProp                                                              | 0m02.81s  || -0m00.08s
0m02.57s  | Equivalences                                                       | 0m02.52s  || +0m00.04s
0m02.46s  | categories/Grothendieck/ToSet                                      | 0m02.68s  || -0m00.22s
0m02.26s  | categories/Functor/Attributes                                      | 0m02.34s  || -0m00.08s
0m02.17s  | categories/Comma/Core                                              | 0m02.20s  || -0m00.03s
0m02.11s  | categories/Category/Sum                                            | 0m02.34s  || -0m00.23s
0m02.08s  | categories/Category/Sigma/Core                                     | 0m01.89s  || +0m00.19s
0m02.06s  | categories/NaturalTransformation/Isomorphisms                      | 0m02.18s  || -0m00.12s
0m01.94s  | types/Record                                                       | 0m01.89s  || +0m00.05s
0m01.92s  | categories/NaturalTransformation/Dual                              | 0m01.90s  || +0m00.02s
0m01.92s  | categories/Pseudofunctor/Core                                      | 0m01.86s  || +0m00.05s
0m01.88s  | PathGroupoids                                                      | 0m01.88s  || +0m00.00s
0m01.84s  | categories/HomFunctor                                              | 0m01.80s  || +0m00.04s
0m01.65s  | categories/FunctorCategory/Morphisms                               | 0m01.64s  || +0m00.01s
0m01.65s  | contrib/HoTTBookExercises                                          | 0m00.98s  || +0m00.67s
0m01.62s  | categories/NaturalTransformation/Paths                             | 0m01.62s  || +0m00.00s
0m01.41s  | categories/Functor/Composition/Functorial/Core                     | 0m01.13s  || +0m00.28s
0m01.32s  | categories/Category/Prod                                           | 0m01.27s  || +0m00.05s
0m01.32s  | categories/InitialTerminalCategory/Pseudofunctors                  | 0m01.31s  || +0m00.01s
0m01.30s  | categories/NaturalTransformation/Pointwise                         | 0m01.30s  || +0m00.00s
0m01.28s  | types/Prod                                                         | 0m01.28s  || +0m00.00s
0m01.28s  | categories/Limits/Core                                             | 0m01.28s  || +0m00.00s
0m01.18s  | categories/Category/Sigma/OnObjects                                | 0m01.28s  || -0m00.10s
0m01.00s  | categories/NaturalTransformation/Composition/Laws                  | 0m01.04s  || -0m00.04s
0m00.98s  | categories/Functor/Pointwise                                       | 0m01.01s  || -0m00.03s
0m00.98s  | categories/CategoryOfSections/Core                                 | 0m01.04s  || -0m00.06s
0m00.97s  | categories/ExponentialLaws/Law1/Functors                           | 0m01.07s  || -0m00.10s
0m00.96s  | categories/NaturalTransformation/Prod                              | 0m00.97s  || -0m00.01s
0m00.89s  | categories/Functor/Prod                                            | 0m00.90s  || -0m00.01s
0m00.88s  | categories/ExponentialLaws/Law   N/A                               | 0m01.01s  || -0m00.13s
0m00.88s  | types/Paths                                                        | 0m00.86s  || +0m00.02s
0m00.85s  | hit/Spheres                                                        | 0m00.90s  || -0m00.05s
0m00.80s  | categories/SetCategory/Morphisms                                   | 0m00.78s  || +0m00.02s
0m00.78s  | contrib/HoTTBook                                                   | 0m00.77s  || +0m00.01s
0m00.73s  | categories/NaturalTransformation/Composition/Core                  | 0m00.67s  || +0m00.05s
0m00.65s  | types/Universe                                                     | 0m00.68s  || -0m00.03s
0m00.65s  | hit/Suspension                                                     | 0m00.70s  || -0m00.04s
0m00.64s  | categories/categories                                              | 0m00.68s  || -0m00.04s
0m00.63s  | types/Sum                                                          | 0m00.58s  || +0m00.05s
0m00.62s  | UnivalenceImpliesFunext                                            | 0m00.61s  || +0m00.01s
0m00.60s  | categories/NaturalTransformation/Sum                               | 0m00.54s  || +0m00.05s
0m00.59s  | hit/Circle                                                         | 0m00.47s  || +0m00.12s
0m00.54s  | Trunc                                                              | 0m00.61s  || -0m00.06s
0m00.53s  | Functorish                                                         | 0m00.57s  || -0m00.03s
0m00.52s  | categories/InitialTerminalCategory/Functors                        | 0m00.48s  || +0m00.04s
0m00.52s  | categories/Comma/Projection                                        | 0m00.61s  || -0m00.08s
0m00.51s  | categories/Functor/Composition/Laws                                | 0m00.52s  || -0m00.01s
0m00.50s  | hit/quotient                                                       | 0m00.55s  || -0m00.05s
0m00.48s  | types/Forall                                                       | 0m00.44s  || +0m00.03s
0m00.44s  | categories/ExponentialLaws/Law3/Functors                           | 0m00.42s  || +0m00.02s
0m00.44s  | categories/Limits/Functors                                         | 0m00.53s  || -0m00.09s
0m00.42s  | categories/Cat/Core                                                | 0m00.46s  || -0m00.04s
0m00.42s  | Tactics                                                            | 0m00.42s  || +0m00.00s
0m00.42s  | categories/KanExtensions/Functors                                  | 0m00.50s  || -0m00.08s
0m00.41s  | hit/Pushout                                                        |    N/A    || +0m00.41s
0m00.41s  | categories/NaturalTransformation/Identity                          | 0m00.39s  || +0m00.01s
0m00.38s  | categories/Functor/Functor                                         | 0m00.29s  || +0m00.09s
0m00.37s  | categories/KanExtensions/Core                                      | 0m00.28s  || +0m00.08s
0m00.36s  | TruncType                                                          | 0m00.32s  || +0m00.03s
0m00.36s  | Fibrations                                                         | 0m00.41s  || -0m00.04s
0m00.34s  | categories/InitialTerminalCategory/NaturalTransformations          | 0m00.33s  || +0m00.01s
0m00.34s  | categories/FundamentalPreGroupoidCategory                          | 0m00.32s  || +0m00.02s
0m00.34s  | categories/IndiscreteCategory                                      | 0m00.35s  || -0m00.00s
0m00.33s  | categories/Functor/Dual                                            | 0m00.29s  || +0m00.04s
0m00.32s  | categories/HomotopyPreCategory                                     | 0m00.32s  || +0m00.00s
0m00.31s  | categories/Adjoint/Adjoint                                         | 0m00.24s  || +0m00.07s
0m00.29s  | categories/InitialTerminalCategory/InitialTerminalCategory         | 0m00.25s  || +0m00.03s
0m00.28s  | categories/NaturalTransformation/Composition/Functorial            | 0m00.27s  || +0m00.01s
0m00.28s  | categories/Grothendieck/Grothendieck                               | 0m00.28s  || +0m00.00s
0m00.27s  | categories/Utf8                                                    | 0m00.29s  || -0m00.01s
0m00.27s  | hit/minus1Trunc                                                    | 0m00.24s  || +0m00.03s
0m00.27s  | categories/Cat/Morphisms                                           | 0m00.26s  || +0m00.01s
0m00.25s  | categories/ExponentialLaws/ExponentialLaws                         | 0m00.24s  || +0m00.01s
0m00.24s  | categories/SetCategory/Functors/Functors                           | 0m00.25s  || -0m00.01s
0m00.24s  | categories/CategoryOfGroupoids                                     | 0m00.19s  || +0m00.04s
0m00.24s  | categories/Category/Objects                                        | 0m00.26s  || -0m00.02s
0m00.24s  | categories/NaturalTransformation/Core                              | 0m00.29s  || -0m00.04s
0m00.24s  | types/Arrow                                                        | 0m00.26s  || -0m00.02s
0m00.24s  | categories/Notations                                               | 0m00.28s  || -0m00.04s
0m00.23s  | categories/NaturalTransformation/NaturalTransformation             | 0m00.20s  || +0m00.03s
0m00.23s  | categories/Grothendieck/ToCat                                      | 0m00.22s  || +0m00.01s
0m00.23s  | categories/Adjoint/Hom                                             | 0m00.29s  || -0m00.05s
0m00.23s  | categories/Functor/Notations                                       | 0m00.16s  || +0m00.07s
0m00.22s  | Conjugation                                                        | 0m00.18s  || +0m00.04s
0m00.22s  | categories/Functor/Prod/Prod                                       | 0m00.20s  || +0m00.01s
0m00.22s  | categories/GroupoidCategory/Core                                   | 0m00.19s  || +0m00.03s
0m00.22s  | categories/NaturalTransformation/Utf8                              | 0m00.19s  || +0m00.03s
0m00.21s  | categories/Cat/Cat                                                 | 0m00.18s  || +0m00.03s
0m00.21s  | hit/iso                                                            | 0m00.16s  || +0m00.04s
0m00.21s  | categories/Functor/Utf8                                            | 0m00.18s  || +0m00.03s
0m00.20s  | categories/DependentProduct                                        | 0m00.19s  || +0m00.01s
0m00.20s  | categories/Limits/Limits                                           | 0m00.19s  || +0m00.01s
0m00.20s  | categories/Comma/Comma                                             | 0m00.18s  || +0m00.02s
0m00.20s  | types/Bool                                                         | 0m00.20s  || +0m00.00s
0m00.20s  | categories/Category/Pi                                             | 0m00.16s  || +0m00.04s
0m00.19s  | categories/Functor/Composition/Composition                         | 0m00.20s  || -0m00.01s
0m00.18s  | categories/FunctorCategory/Utf8                                    | 0m00.16s  || +0m00.01s
0m00.18s  | HoTT                                                               | 0m00.18s  || +0m00.00s
0m00.18s  | categories/Category/Dual                                           | 0m00.17s  || +0m00.00s
0m00.18s  | categories/Adjoint/Identity                                        | 0m00.17s  || +0m00.00s
0m00.18s  | Modality                                                           | 0m00.19s  || -0m00.01s
0m00.18s  | categories/Comma/Notations                                         | 0m00.10s  || +0m00.07s
0m00.18s  | categories/Category/Category                                       | 0m00.20s  || -0m00.02s
0m00.18s  | categories/NatCategory                                             | 0m00.17s  || +0m00.00s
0m00.18s  | categories/Pseudofunctor/Pseudofunctor                             | 0m00.24s  || -0m00.06s
0m00.18s  | categories/ExponentialLaws/Law2/Law2                               | 0m00.15s  || +0m00.03s
0m00.18s  | categories/FunctorCategory/Core                                    | 0m00.16s  || +0m00.01s
0m00.17s  | categories/Functor/Composition/Functorial                          | 0m00.19s  || -0m00.01s
0m00.17s  | categories/Adjoint/Notations                                       | 0m00.18s  || -0m00.00s
0m00.17s  | categories/Category/Core                                           | 0m00.14s  || +0m00.03s
0m00.17s  | FunextVarieties                                                    | 0m00.21s  || -0m00.03s
0m00.16s  | Contractible                                                       | 0m00.11s  || +0m00.05s
0m00.16s  | categories/Adjoint/Composition/Composition                         | 0m00.15s  || +0m00.01s
0m00.16s  | categories/PseudonaturalTransformation/PseudonaturalTransformation | 0m00.15s  || +0m00.01s
0m00.16s  | categories/SetCategory/SetCategory                                 | 0m00.13s  || +0m00.03s
0m00.16s  | Overture                                                           | 0m00.14s  || +0m00.01s
0m00.16s  | categories/Adjoint/Composition/LawsTactic                          | 0m00.13s  || +0m00.03s
0m00.15s  | categories/Profunctor/Core                                         | 0m00.09s  || +0m00.06s
0m00.15s  | Misc                                                               | 0m00.15s  || +0m00.00s
0m00.15s  | categories/FunctorCategory/FunctorCategory                         | 0m00.17s  || -0m00.02s
0m00.15s  | categories/InitialTerminalCategory/Notations                       | 0m00.16s  || -0m00.01s
0m00.15s  | categories/NaturalTransformation/Notations                         | 0m00.12s  || +0m00.03s
0m00.15s  | hit/Truncations                                                    | 0m00.14s  || +0m00.00s
0m00.14s  | categories/Profunctor/Representable                                | 0m00.14s  || +0m00.00s
0m00.14s  | categories/DiscreteCategory                                        | 0m00.17s  || -0m00.03s
0m00.14s  | categories/Adjoint/Utf8                                            | 0m00.17s  || -0m00.03s
0m00.14s  | categories/KanExtensions/KanExtensions                             | 0m00.19s  || -0m00.04s
0m00.14s  | hit/Interval                                                       | 0m00.17s  || -0m00.03s
0m00.14s  | categories/InitialTerminalCategory/Core                            | 0m00.17s  || -0m00.03s
0m00.14s  | hit/TwoSphere                                                      | 0m00.12s  || +0m00.02s
0m00.14s  | Tests                                                              | 0m00.12s  || +0m00.02s
0m00.13s  | categories/Comma/Utf8                                              | 0m00.14s  || -0m00.01s
0m00.13s  | categories/GroupoidCategory/GroupoidCategory                       | 0m00.08s  || +0m00.05s
0m00.13s  | categories/Category/Utf8                                           | 0m00.12s  || +0m00.01s
0m00.13s  | categories/SetCategory/Core                                        | 0m00.16s  || -0m00.03s
0m00.13s  | hit/unique_choice                                                  | 0m00.14s  || -0m00.01s
0m00.13s  | categories/Profunctor/Profunctor                                   | 0m00.12s  || +0m00.01s
0m00.13s  | categories/ExponentialLaws/Law1/Law1                               | 0m00.13s  || +0m00.00s
0m00.13s  | categories/FunctorCategory/Notations                               | 0m00.14s  || -0m00.01s
0m00.13s  | categories/Profunctor/Utf8                                         | 0m00.12s  || +0m00.01s
0m00.12s  | categories/ExponentialLaws/Law3/Law3                               | 0m00.14s  || -0m00.02s
0m00.12s  | categories/Profunctor/Notations                                    | 0m00.13s  || -0m00.01s
0m00.12s  | coq/Init/Peano                                                     | 0m00.13s  || -0m00.01s
0m00.12s  | categories/ExponentialLaws/Law4/Law4                               | 0m00.10s  || +0m00.01s
0m00.12s  | categories/Category/Univalent                                      | 0m00.14s  || -0m00.02s
0m00.12s  | categories/Functor/Composition/Core                                | 0m00.14s  || -0m00.02s
0m00.12s  | categories/Category/Notations                                      | 0m00.11s  || +0m00.00s
0m00.12s  | categories/Category/Subcategory/Full                               | 0m00.08s  || +0m00.03s
0m00.12s  | categories/Structure/Utf8                                          | 0m00.08s  || +0m00.03s
0m00.11s  | categories/Adjoint/Core                                            | 0m00.11s  || +0m00.00s
0m00.11s  | categories/Category/Subcategory/Wide                               | 0m00.11s  || +0m00.00s
0m00.11s  | types/Unit                                                         | 0m00.13s  || -0m00.02s
0m00.10s  | categories/Structure/Structure                                     | 0m00.15s  || -0m00.04s
0m00.10s  | categories/Structure/Notations                                     | 0m00.08s  || +0m00.02s
0m00.10s  | categories/Category/Subcategory/Subcategory                        | 0m00.12s  || -0m00.01s
0m00.10s  | categories/Profunctor/Identity                                     | 0m00.14s  || -0m00.04s
0m00.10s  | UnivalenceAxiom                                                    | 0m00.08s  || +0m00.02s
0m00.10s  | categories/Functor/Pointwise/Pointwise                             | 0m00.11s  || -0m00.00s
0m00.09s  | categories/NaturalTransformation/Composition/Composition           | 0m00.14s  || -0m00.05s
0m00.09s  | types/Empty                                                        | 0m00.10s  || -0m00.01s
0m00.09s  | categories/CategoryOfSections/CategoryOfSections                   | 0m00.10s  || -0m00.01s
0m00.08s  | categories/Functor/Identity                                        | 0m00.07s  || +0m00.00s
0m00.08s  | categories/Functor/Core                                            | 0m00.10s  || -0m00.02s
0m00.08s  | types/UniverseLevel                                                | 0m00.10s  || -0m00.02s
0m00.08s  | categories/Category/Sigma/Sigma                                    | 0m00.08s  || +0m00.00s
0m00.08s  | FunextAxiom                                                        | 0m00.08s  || +0m00.00s
0m00.06s  | categories/Category/Strict                                         | 0m00.08s  || -0m00.02s
0m00.06s  | coq/Init/Specif                                                    | 0m00.07s  || -0m00.01s
0m00.06s  | Pointed                                                            | 0m00.08s  || -0m00.02s
0m00.06s  | coq/Init/Logic_Type                                                | 0m00.06s  || +0m00.00s
0m00.05s  | coq/Init/Datatypes                                                 | 0m00.05s  || +0m00.00s
0m00.05s  | coq/Program/Tactics                                                | 0m00.06s  || -0m00.00s
0m00.04s  | coq/Init/Logic                                                     | 0m00.02s  || +0m00.02s
0m00.04s  | coq/Init/Prelude                                                   | 0m00.04s  || +0m00.00s
0m00.04s  | coq/Init/Tactics                                                   | 0m00.05s  || -0m00.01s
0m00.03s  | coq/Init/Notations                                                 | 0m00.04s  || -0m00.01s
0m00.02s  | coq/Bool/Bool                                                      | 0m00.02s  || +0m00.00s