1) The asset goes to the database as a blob. When the asset is requested (image asset), it is rendered from the database at the particular size (and any other filters requested) and saved to the temporary file system with a unique name. Henceforth, if that same asset is requested with the same treatment, then the cached, temporary version is returned, rather than going to the database again. You cannot control where this uploads to, as it is going into the database.
2) In answering this, I'm making this assumption - you're familiar with the database tables required to populate a template (this is what you're trying to customize). The /src/main/resources/archetype-resources/site-war/src/main/resources/sql/load_content_structure.sql file in the archetype shows how a sample template is created. With that in mind:
a) Assets are uploaded and managed on the asset tab in the CMS. Moving this upload functionality elsewhere is a task beyond the scope of what I can describe in this forum post.
b) If you would like to simply create a field that can be populated with the url of a file that was previously uploaded in the asset tab (presumably you would like the user to select an image from a visual list of image thumbnails), then this is possible. You'll need to set the fieldType for you FieldDefinition to ASSET_URL. This will cause the form to render a text field that allows the image search. You'll need to configure the callback for this in your presenter. Take a look at the config for "staticAssetTreeDS" in OneToOneProductSkuPresenter for an example of setting up your datasource and callback.
3) Take a look at overriding the "assetServerUrlPrefix" property of UtilityRemoteService. This service currently has the bean id of "blUtilityRemoteService"