[chore] Split out layout and arrow loading functionality

Split functionality out into separate files
Using callbacks to tie back to original widget

Starting to split out functionality for the widget, which is necessary for writing unit tests. Secondary goals are to achieve reusability of these common components if necessary, and ultimately a table component. 

@stulees please review. Thanks.