JSON.decode returns a tuple

Given the "failures aren't exceptional" mindset, JSON.parse returns
{ :ok, ... } or { :error, ... }.
JSON.decode works on an empty string
JSON.decode works on simple strings
Move decoding to its own module