Remove code duplication add documentation

The `FutureTickQueue` and `NextTickQueue` class were basically the same, there was a great deal of code duplication present. Refactored it to an abstract class.

Created an abstract `Loop` class to contain all duplicate logic from the `LoopInterface` implementations.

Also added some documentation where it was missing.

I tried not to break BC, just remove duplicate logic and add documentation. 
If I overlooked something, please let me know and I will fix it to be BC again.