
 Move cu to another package (same project)
 /SIMPLEST POSSIBLE IMPLEMENTATION - NO SMARTNESS INVOLVED/
 
 arguments:
 	cu,
 	newNackage
 	
 preconditions:
	1. cu.name must not exist in newPackage
	2. none of the cu.topLevelTypes must exist in newPackage
	3. there must not be a main method in any of the cu.topLevelTypes
	   (or is cu.publicType enough?)
	4. there must not be a native method declared in _any_ of the types declared
		in cu.
	5. none of cu.topLevelTypes must be used os a parameter of a native method
	6. this could be more smart (i'll be more restrictive for a start):
		- in new package there can be no type (toplevel or nested) with any of cu.types names
	7. there must no be references (outside of cu) to package-visibles members in cu
	8. inside the cu there must not be any references to package-visible java elements from other cus
	9. inside the cu all references to protected java elements from other cus in this package must be
		visible from other packages	
	10. other cus in the same package can reference protected java elements from cu only if these references
		are in corresponding sub-hierarchies (blah, blah - rewrite)
 
 changes:
 	1. move the cu
 		- java model does: package declaration change
 	2. remove imports of types from newPackage (optional)
 	3. add import cu.package; to cu (if it's not already there)
 		possible improvement: check if this import is really needed 
 		/however, imports on demand *almost* never harmful/
 	4. change all fully qualified references to types in cu to the new ones.
 		(this, of course, does not solve the problem with non-uniqueness of fully
 		 qualified type names)
 	5. add import newPackage.*; to all cus (outside of cu.package) that referenced cu.publicType
 		. only add the import if it's not already there