Clean up misc. todos.

- Implement missing extra field functions
- add flag for zip_file_add that overwrites any existing entry with same name
- set "version needed"/"version made by" correctly (zip64)
- zip_replace: set compression method to default unless user-set
- reset compression specific bits in bitflags when (re)compressing
- rename zip_get_{compression,encryption}_implementation to _zip_*
diff --git a/lib/zip_set_file_compression.c b/lib/zip_set_file_compression.c
index 51a74a2..bbcaa65 100644
--- a/lib/zip_set_file_compression.c
+++ b/lib/zip_set_file_compression.c
@@ -60,20 +60,22 @@
 
     e = za->entry+idx;
     
-    if (method != (e->orig ? e->orig->comp_method : ZIP_CM_DEFAULT)) {
+    if (method == ZIP_CM_DEFAULT && e->orig == NULL) {
+	if (e->changes) {
+	    e->changes->changed &= ~ZIP_DIRENT_COMP_METHOD;
+	    if (e->changes->changed == 0) {
+		_zip_dirent_free(e->changes);
+		e->changes = NULL;
+	    }
+	}
+    }
+    else {
 	if (e->changes == NULL)
 	    e->changes = _zip_dirent_clone(e->orig);
 
 	e->changes->comp_method = method;
 	e->changes->changed |= ZIP_DIRENT_COMP_METHOD;
     }
-    else if (e->changes) {
-	e->changes->changed &= ~ZIP_DIRENT_COMP_METHOD;
-	if (e->changes->changed == 0) {
-	    _zip_dirent_free(e->changes);
-	    e->changes = NULL;
-	}
-    }
     
     return 0;
 }