Simplify API of DistributedCommandPlanner

Old Model:
    planner = DistributedCommandPlanner.new(message)
    planner.outputs << "name"
    planner.reduce("name", <reducer>)
    planner.broadcast_all
    planner.messages

New Model:
    planner = DistributedCommandPlanner.new(message)
    planner.broadcast(:write => true)
    planner.reduce("name", <reducer>)
    planner.plan
    planner.messages
Plan messages correctly
Define outputs correctly
Fix outputs.

They are outputs of the handler, not reducer.
Allow to define "key" of scattering after "scatter" is called
Allow to define multiple reducers at once
Define utility methods to distribute "broadcast" and "scatter" messages easily
Register default errors reducer correctly
Fix syntax error
Allow to define reducer with its type
Define "sum" type reducer as a constant
Accept string type reducer correctly
Detect "missing key" error with delay
Broadcast messages correctly