TZCNT and LZCNT use a completely different encoding scheme, so they should probably go in a separate patch. Also add some tests.