fix failing tests by moving Protocols to Multimethods (with implicit platforms)
move run! and run-to-memory! into protocol

- extract platform specific testing behavoir into their own files