This moves the initial XML parsing into the form submit request, then stores the resulting Opml object as a gob instead of storing the raw upload bytes. If the upload is malformed, the request response body includes a copy of the full error message. The ajaxform code will show this to the user as a new message. There may be some risk in moving work into the main request, because appengine likes requests to be low-latency. I think it's a reasonable tradeoff, in part because imports are relatively infrequest.
For feeds without a charset in the content type, this allows them to also identify their charset via the xml header. We could remove the previous commit in lieu of this, but the Windows 1252 default is still bad, and would have gotten triggered if, say, the newline at the end of xml.Header didn't appear in the xml file.
For feeds that do not identify charset (jvns.ca, for example), the charmap package defaults to Windows1252 if there is no byte that appears to be in UTF-8's range in the first 1024 bytes. But if the entire file appears to be UTF-8, let's just use that.