Class generation build items are screwy
We have a `GeneratedClassBuildItem` which accepts a class name, byte array, and a flag to indicate what "kind" of class it is.

At the same time, we have a pattern for generating classes, particularly with Gizmo: consume the `ClassOutputBuildItem` and then feed it to Gizmo and have it write the class directly to the `ClassOutput`.

On top of all this, we have two different kinds of `ClassOutput`.

The build item is not ideal because to use it with Gizmo, you have to create your own `ClassOutput` (the Gizmo one) and have it produce the generated classes (i.e. you can't just return a `GeneratedClassBuildItem` unless you stash the object somewhere).

The common Gizmo pattern of consuming the `ClassOutputBuildItem` is not ideal because nothing is produced - so the build step won't run unless you artificially produce something.

We should make the `ClassOutputBuildItem` work nicely with Gizmo and non-Gizmo usages.  Maybe Gizmo should emit classes to an array by default, or maybe `ClassOutputBuildItem` should accept a supplier for class bytes that the Gizmo class factory can produce (if we're worried about heap usage).  Maybe Gizmo's `ClassOutput` API should be replaced by a pull API like `ClassCreator.write(OutputStream)` or `ClassCreator.getBytes()` (or both).

diff --git a/core/deployment/src/main/java/io/quarkus/deployment/ClassOutput.java b/core/deployment/src/main/java/io/quarkus/deployment/ClassOutput.java
deleted file mode 100644
index daf3f819b06..00000000000
--- a/core/deployment/src/main/java/io/quarkus/deployment/ClassOutput.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package io.quarkus.deployment;
-
-import java.io.IOException;
-import java.io.Writer;
-
-import io.quarkus.gizmo.NullWriter;
-
-/**
- * Interface that represents a target for generated bytecode
- */
-public interface ClassOutput {
-
-    /**
-     * Writes some generate bytecode to an output target
-     *
-     * @param className The class name
-     * @param data The bytecode bytes
-     * @throws IOException If the class cannot be written
-     */
-    void writeClass(boolean applicationClass, String className, byte[] data) throws IOException;
-
-    void writeResource(String name, byte[] data) throws IOException;
-
-    default Writer writeSource(String className) {
-        return NullWriter.INSTANCE;
-    }
-
-}
['core/deployment/src/main/java/io/quarkus/deployment/ClassOutput.java']