invoke hooks as its method

so we can use 'this' in the hook
remove duplicate collision function

if the entity does not specify its own collision function, just
use 'normal'
basic refactoring

get rid of PosFunc

create position to a entity by its specified attribute
but not its 'type'
get rid of 'type'

since now, we don't specify 'type' to an entity.
Instead of that, we specify what the entity looks like and how
it works.
create npc from array

A NPC is an entity with

    1. special component string - "NPC"
    2. special function
create special NPCs from array

Let these NPCs bind to an interaction object that create by
invoking specific method. So we add one more hook to achieve that.
overworld: re-organize code and add comments

hope it make things looks clear