Topological order

The idea is to sort addins in a topological order. Each addin can define one of five things for _order_:
* `>X` - I must be immediately after the addin with id X

* `>>X` - I must be somewhere after the addin with id X (but not necessarily immediately) 

* `<X`- I must be immediately before the addin with id X

* `<<X` - I must be somewhere before the addin with id X (but not necessarily immediately) 

* `Number` - A numerical order which is used if none of the above is applicable


i wonder what happened to my comments on this function... nevermind, they were general:
you have symmetrical cases for < and > but you don't take advantage of this fact by having an external private function that handles one of these say X < Y which you can delegate to "easily" if the case you have is X < Y, and in a more "complicated" fashion if X > Y and then you just Y < X.

also, don't parse stuff on your own like this. find a tokenizer, or build one if you have to, but don't nested-if findIndex of "<" characters. 
this function is written in a way that distracts from its purpose. whenever you try to do maintenance here you'll have to go all complicated and rely on your tests to save you. i recommend refactoring this.