Mark our strictly internal classes as final
Merge pull request #287 from GrahamCampbell/final

Mark our strictly internal classes as final
Allow the user to have custom ways to set attributes
Added the required setter property
Allow custom model "making" too
Arranged functions in the order they are called
Corrected the return type of the settAttribute function
Added customisation tests