HTTP/2 Priority Algorithm Restructure

Motivation:
The current priority algorithm uses 2 different mechanisms to iterate the priority tree and send the results of the allocation.  The current algorithm also uses a two step phase where everything is traversed and allocation amounts are calculated and then everything is traversed again and everything that was allocated is sent.

Modifications:
- DefaultHttp2OutboundFlowController will allocate and send in the same looping structure.
- The recursive method will send only for the children instead of itself and its children which should simplify the recursion.

Result:
Hopefully simplified recursive algorithm with consistent tree iteration approach and 1 less iteration pass.
>Since this method is recursive, we could we calling it more than once on the same streams, each time with different connection windows. 
Each stream should only be visited 1 time via recursion.  The recursive calls only consider a node's children (not the node itself).  The only time a node may be visited more than once is not through recursion but the priority loops (if element gets re-inserted into children list because it still wants to send more).

> Just because our assigned connection window is exhausted doesn't mean that we're completely done allocating to these streams.

Agreed.  However the first head to tail loop should be designed to call `writeChildNode` only if a stream can not send anymore (`state.streamableBytes() - bytesForChild == 0`).  If you look at the loop boundaries within this if block they are not touching elements that have already been serviced in the "current" loop (from 0 to when the connection window was exhausted).  Once bytes are sent the allocated amount is reset and so it will not send again until more is allocated.