Decoding now returns an enum rather than bool.

When decoding, a short stream typically indicates an error in buffering, not in the stream itself. It's important that the character pointer not move when a short stream is encountered, but there's no easy way for clients to detect this other than to keep a copy of the original char pointer and comparing on fail. Instead, all Decode() variants now return an enum.