Added documentation
Added several new implementations
Cleaned up code