Overhauled port command completion

This is my shot at enhancing the port completions.  I have some questions
though: should we put the cached port list in a file, like in ~/.cache/ for
example? I'm a little it wary of putting large stuff in shell vairables, and
if I have a file, I can see if it's newer than the port database and update it
only if it's necessary.