Switch to "typed" implementation

This should allow for some genericity.
Rename a couple tests to be inline with their functions
Add %stream? function