More elegant way to deal with initializing record instances

Instead of calling ::alloc.initialize from a new_empty method, instead alias
::new to ::new_empty, then define ::new to create a new record and call the
additional #initialize_new_record method. This should make things a lot saner
in the inheritence chain since subclasses/modules can just override either
 #initialize or #initialize_new_record as appropriate.