Starting decode

I changed the contract of `decode` to return a tuple with the status in the first position. This seems to follow things like `File.open` and `IO.read`. In my mind, there would be a `decode!` version that raises an exception on error.

It's far from done. I just wanted to get the ball rolling. I'll continue work on this.