Extended pipeline to support adding vertex bindings
Vertex bindings can now be added via a template function that assumes that the type implements the following;
- A function matching the signature of PFN_GetVertexInputBindingDescription and with the name get_binding_description
- A function matching the signature of PFN_GetVertexAttributeDescriptions and with the name get_attribute_descriptions
GetVertexAttributeDescriptions should set the num_attachments to the number of attachments if and only if the attachment output pointer is nullptr. If the output pointer is not nullptr, num_attachments should be treated as a size. Return VK_SUCCESS on success, or a different value otherwise.