AbstractGateway: add missing final keywords
Make Gateway into a type of Plugin

This allows available Gateways to be discovered at runtime, which can be
useful for some purposes. For example, the Script Editor will use this
mechanism in the future to register shortcut aliases for the Gateways,
so that you can write:

    // @ImageJ ij

Instead of needing to write out the FQCN:

    // @imagej.ImageJ ij