Issue 1:
A playbook used for testing:

---

- hosts: all
remote_user: root

tasks:
- debug: msg="First task"
- debug: msg="Second task"

When run with command ansible-playbook -i inventory -l hostname -k debug.yml, Ansible connects to host as 'root' account, gathers facts, and for subsequent tasks connects to remote host using username from local system which is used to run ansible-playbook (in my case, 'drybjed'). Example output:

drybjed ansible-aiua/ $ ansible-playbook -i inventory -k debug.yml -l philote.aiua -vvv
SSH password:

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
<philote.aiua> ESTABLISH CONNECTION FOR USER: root
<philote.aiua> EXEC ['sshpass', '-d4', 'ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/drybjed/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'GSSAPIAuthentication=no', '-o', 'PubkeyAuthentication=no', '-o', 'User=root', '-o', 'ConnectTimeout=10', 'philote.aiua', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-1382344700.02-43467222883968 && echo $HOME/.ansible/tmp/ansible-1382344700.02-43467222883968'"]
<philote.aiua> REMOTE_MODULE setup
<philote.aiua> PUT /tmp/tmpxTVWFf TO /root/.ansible/tmp/ansible-1382344700.02-43467222883968/setup
<philote.aiua> EXEC ['sshpass', '-d4', 'ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/drybjed/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'GSSAPIAuthentication=no', '-o', 'PubkeyAuthentication=no', '-o', 'User=root', '-o', 'ConnectTimeout=10', 'philote.aiua', "/bin/sh -c '/usr/bin/python /root/.ansible/tmp/ansible-1382344700.02-43467222883968/setup; rm -rf /root/.ansible/tmp/ansible-1382344700.02-43467222883968/ >/dev/null 2>&1'"]
ok: [philote.aiua]

TASK: [debug msg="First task"] ************************************************
<philote.aiua> ESTABLISH CONNECTION FOR USER: drybjed
ok: [philote.aiua] => {
"msg": "First task"
}

TASK: [debug msg="Second task"] ***********************************************
<philote.aiua> ESTABLISH CONNECTION FOR USER: drybjed
ok: [philote.aiua] => {
"msg": "Second task"
}

PLAY RECAP ********************************************************************
philote.aiua : ok=3 changed=0 unreachable=0 failed=0

When the same playbook is run with command ansible-playbook -i inventory -k -u root -l hostname debug.yml, playbook behaves as expected

drybjed ansible-aiua/ $ ansible-playbook -i inventory -k -u root debug.yml -l philote.aiua -vvv
SSH password:

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
<philote.aiua> ESTABLISH CONNECTION FOR USER: root
<philote.aiua> EXEC ['sshpass', '-d4', 'ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/drybjed/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'GSSAPIAuthentication=no', '-o', 'PubkeyAuthentication=no', '-o', 'User=root', '-o', 'ConnectTimeout=10', 'philote.aiua', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-1382344783.69-47258613050074 && echo $HOME/.ansible/tmp/ansible-1382344783.69-47258613050074'"]
<philote.aiua> REMOTE_MODULE setup
<philote.aiua> PUT /tmp/tmpbDXxl2 TO /root/.ansible/tmp/ansible-1382344783.69-47258613050074/setup
<philote.aiua> EXEC ['sshpass', '-d4', 'ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/drybjed/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'GSSAPIAuthentication=no', '-o', 'PubkeyAuthentication=no', '-o', 'User=root', '-o', 'ConnectTimeout=10', 'philote.aiua', "/bin/sh -c '/usr/bin/python /root/.ansible/tmp/ansible-1382344783.69-47258613050074/setup; rm -rf /root/.ansible/tmp/ansible-1382344783.69-47258613050074/ >/dev/null 2>&1'"]
ok: [philote.aiua]

TASK: [debug msg="First task"] ************************************************
<philote.aiua> ESTABLISH CONNECTION FOR USER: root
ok: [philote.aiua] => {
"msg": "First task"
}

TASK: [debug msg="Second task"] ***********************************************
<philote.aiua> ESTABLISH CONNECTION FOR USER: root
ok: [philote.aiua] => {
"msg": "Second task"
}

PLAY RECAP ********************************************************************
philote.aiua : ok=3 changed=0 unreachable=0 failed=0

I'm using current ansible devel from git repository, created using make deb

I don't have remote_user variable set in ansible.cfg or inventory.

Issue 2:
Trivial playbook:

---
- hosts: somelist
user: root

tasks:
- name: test echo
command: echo {{ item }}
with_items:
- foo
- bar

with 1.3.3 both implicit setup and command tasks are run as root. With devel (afa781d at this moment) the implicit setup task is run as root and the command task is run as the current user.