Major refactoring: Ommitting properties for state and value because these should not be accessible - especially via set() from the outside. Switched state/locking before exeucting queue - is more correct IMHO and prevents registration of immediate exec when already locked. Improved cleanup logic and moved before releasing so that promises which are not used again to not keep references to stuff they interacted with.