Make normalize ignore %2B in query strings

In a query string, '+' is reserved as a shorthand for space, so "real"
pluses encoded as %2b should be preserved during normalization:

  http://example.com/one%2btwo/calc?q=1%2b2+2%2b3

is normalized as:

  http://example.com/one+two/calc?q=1%2B2+2%2B3

Previously this would have been normalized to:

  http://example.com/one+two/calc?q=1+2+2+3

making '+' ambiguous.
Move normalization logic out of URI::unencode

Instead of upcasing leave_encoded characters inside the unencode call,
leave them as they are and pass the list on to encode_component for
upcasing.

This encapsulation keeps unencode free of any normalization logic.

Also added some more test cases around leave_encoded handling.
Further paranoia regarding frozen strings.

Conflicts:
	lib/addressable/uri.rb
	spec/addressable/uri_spec.rb
Queries and fragments should be truncated by normalization if empty.

Fixes #130.

Conflicts:
	lib/addressable/uri.rb