Extracted classes out into own files.

Simplified namespaces.
Fixed hash syntax.
Added more tests.
Remove `self`