Feature - Callback data structures

This PR resolves #200 by introducing more proper data-structures into Klein for a few areas that were using simple arrays and inefficient array operations.

This improves the code's clarity and internal API usage. For more information on why this was done, see #200.