Separate protocols implementation, refactor prettyString composing

Adresses https://github.com/lingoer/SwiftyJSON/issues/5