Extension API
Created by: vloncar
One of the pitfalls of using hls4ml with new applications is that there is little support for extending hls4ml with custom objects (layers, hls code, optimizers etc). This forces people to create forks and make changes there. These forks often include useful bugfixes and improvements that never go back into the main branch. As a result, we often fix bugs multiple times across different branches. If the core is extendable, there is no need for forks, and bugfixes can be applied once, on the main branch, and we wouldn't waste effort.
This PR extends the core with a few missing features and documents the extension points in depth. It is not the end of extension API, just the beginning, but it should be enough so that most of the new applications targeting existing features don't need to fork.
The included test case demonstrates a flow of extending hls4ml to support a custom Keras layer.