Near Procedure Call.
Usage
// Create a NPC
final npc = NPC((message) async{
// send message
});
//call when message received:
await npc.receive(message);
// register handle
npc.on('ping', (param, cancelable, notify)=>'pong');
// emit
await npc.emit('say', 'hello');
// deliver
final r = await npc.deliver('download', param: '/path', onNotify: (param){
});